如何制作三组字典中三列的条形图,它们具有不同的索引编号和顺序?

时间:2019-06-06 20:21:24

标签: python dictionary bar-chart histogram counter

我正在尝试根据我生成的一些Counter字典创建一个三列条形图,但无法正常工作。

我能够生成其中一个Counter字典的条形图,但不能生成全部三个带有每个索引的列字典的条形图。

f_cond_count=dict(Counter(f_cond_plot))
f_pow_count=dict(Counter(f_pow_plot))
f_mom_count=dict(Counter(f_mom_plot))


print("cond",f_cond_count)
print("pow",f_pow_count)
print("mom",f_mom_count)

df = pd.DataFrame.from_dict((f_cond_count, f_pow_count, f_mom_count), 'index')
df.plot.bar()
plt.show()

此行代码将打印以下内容:

cond {0.1:33,0.2:36,0.30000000000000004:36,0.4:36,0.5:39,0.6:39,0.7000000000000001:39,0.8:39,0.9:39}

战俘{0.7000000000000001:54,0.8:81,0.9:201}

妈妈{0.4:94,0.5:27,0.6:27,0.7000000000000001:18,0.8:9,0.9:9,0.30000000000000004:85,0.2:67}

如果使用以下命令,我可以使用一部字典:

df = pd.DataFrame.from_dict(f_cond_count, 'index')
df.plot.bar()
plt.show()

在其中获得条形图的x轴为[0.1、0.2、0.30000000004、0.4等],y轴为数字[33、36、36、36等]。

当我尝试同时执行所有三个操作时,我收到错误消息:“'tuple'对象没有属性'values'”,我不确定为什么。我也不确定它是否会工作,因为字典的大小不同,有些字典没有某些索引的条目。我正在尝试创建类似于此线程matplotlib: plot multiple columns of pandas data frame on the bar chart

中发布的解决方案的内容

1 个答案:

答案 0 :(得分:0)

您可以首先使用Series从三个字典中创建一个DataFrame,然后一次绘制所有三个条形图。您会注意到,x-ticklabel上的值存在浮点问题。

添加了最后两行,因为否则刻度线标签会显示精度问题

df = pd.DataFrame({'cond': pd.Series(f_cond_count), 'powc': pd.Series(f_pow_count), 
                   'mom': pd.Series(f_mom_count) })

ax = df.plot.bar()
labs = [round(float(t.get_text()), 1) for t in ax.axes.get_xmajorticklabels()]
ax.set_xticklabels(labs);

enter image description here