我有两个字典:
A = {2018: 23, 2019: 30}
B = {2018: 26, 2019:35}
现在,我想绘制A和B的2018/2019年趋势。但是,绘制条形图时,我得到以下结果。岁月不断扩大,以填补空间,而b则完全隐藏了A。请建议如何绘制图形。
原始数据具有数学,科学和总计的平均分,我想在同一张图(条形图)上绘制两年,以显示趋势。
答案 0 :(得分:1)
您可以通过其右边缘的左侧对齐条形图的条形(传递负宽度以使用右边缘对齐)-这样,您可以获得并排的条形。或者,您可以堆叠条形图。
以下是带有输出的代码:
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()
编辑:如果您开始处理更多数据,则可以使用可以更轻松地处理数据的软件包。 Pandas是一个很棒的程序包,它将为您做到这一点。
以下是包含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()