如何从具有不同数量和索引顺序的三组字典中制作包含三列的条形图?

Posted

技术标签:

【中文标题】如何从具有不同数量和索引顺序的三组字典中制作包含三列的条形图?【英文标题】:How to make a bar chart with three columns from three sets of dictionaries with a different number and order of indices? 【发布时间】:2019-10-22 09:17:12 【问题描述】:

我正在尝试从我生成的一些 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()

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

条件 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

pow 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' object has no attribute 'values'”,我不知道为什么。我也不确定它是否会起作用,因为字典的大小不同,而且有些字典没有某些索引的条目。我正在尝试创建类似于此线程 matplotlib: plot multiple columns of pandas data frame on the bar chart

中发布的解决方案的内容

【问题讨论】:

【参考方案1】:

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

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

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);

【讨论】:

以上是关于如何从具有不同数量和索引顺序的三组字典中制作包含三列的条形图?的主要内容,如果未能解决你的问题,请参考以下文章

从字典列表中查找值,其中dicts具有不同数量的键

如何在每个[重复]中制作具有不同数量单元格的部分

如何从具有不同长度列表的字典中创建字典列表

数据结构的三要素

数据结构的三要素

kafka主题分区的数量和数据中不同键的数量