使用matplotlib在python中使用字典的条形图

使用matplotlib在python中使用字典的条形图,python,matplotlib,charts,Python,Matplotlib,Charts,我有两本字典: A = {2018: 23, 2019: 30} B = {2018: 26, 2019:35} 现在我想为A和B绘制2018/2019年的趋势图。然而,在绘制条形图时,我得到了以下结果。岁月在不断扩展,以填满空间,而b则完全隐藏了A。请建议如何绘制图表 原始数据有数学、科学和总计的平均分数,我想在同一个图表(条形图)上绘制两年,以显示趋势 您可以将条形图的条形图按其右边缘的左边缘对齐(通过负宽度以使用右边缘对齐)-这样您可以获得并排的条形图。或者,您可以堆叠这些条 以下是

我有两本字典:

A = {2018: 23, 2019: 30}
B = {2018: 26, 2019:35} 
现在我想为A和B绘制2018/2019年的趋势图。然而,在绘制条形图时,我得到了以下结果。岁月在不断扩展,以填满空间,而b则完全隐藏了A。请建议如何绘制图表


原始数据有数学、科学和总计的平均分数,我想在同一个图表(条形图)上绘制两年,以显示趋势

您可以将条形图的条形图按其右边缘的左边缘对齐(通过负宽度以使用右边缘对齐)-这样您可以获得并排的条形图。或者,您可以堆叠这些条

以下是带有输出的代码:

import matplotlib.pyplot as plt

A = {2018: 23, 2019:30}
B = {2018: 26, 2019:35}

fig, (ax1, ax2) = plt.subplots(1,2, figsize=(12,5))

ax1.bar(A.keys(), A.values(), width=0.2, align='edge', label='A')
ax1.bar(B.keys(), B.values(), width=-0.2, align='edge', label='B')
ax1.set_xticks([2018, 2019])
ax1.set_xlabel('YEAR')
ax1.legend()

ax2.bar(A.keys(), A.values(), width=0.4, align='center', label='A')
ax2.bar(B.keys(), B.values(), bottom=[A[i] for i in B.keys()], width=0.4, align='center', label='B')
ax2.set_xticks([2018, 2019])
ax2.set_xlabel('YEAR')
ax2.legend()

fig.show()

编辑:如果您开始处理更多数据,那么使用能够更轻松地处理数据的软件包是有意义的。这是一个很好的软件包,可以帮你做到这一点

下面是一个具有4组时间序列数据的示例:

import matplotlib.pyplot as plt
import pandas as pd

A = {2018: 23, 2019:30}
B = {2018: 26, 2019:35}
C = {2018: 30, 2019:40}
D = {2018: 20, 2019:50}

df = pd.DataFrame([A,B,C,D], index=['A','B','C','D']).transpose()

fig, ax= plt.subplots(1,1, figsize=(6,5))

df.plot.bar(ax=ax)
ax.set_xlabel('YEAR')

fig.tight_layout()
fig.show()
输出如下图所示:

非常感谢,Robbie,我想问,如果我有3个变量要绘制(A、B、C),会怎么样。我们将如何调整宽度?嗨@ApoorvaaSingh-查看编辑,希望这有帮助!非常感谢。这很有帮助:)另外,如果您能告诉我如何旋转XLabel(我尝试使用ax.setxticklabels(rotation=90)似乎不起作用,您必须将该参数添加到panda的bar函数调用中:df.plot.bar(ax=ax,rot=0)