如何使用 Pandas 绘制条形图?

Posted

技术标签:

【中文标题】如何使用 Pandas 绘制条形图?【英文标题】:How do I plot a bar graph using Pandas? 【发布时间】:2017-08-27 22:28:27 【问题描述】:

我有这样的熊猫数据框

a  b  c  d  e  f  label
1  3  4  5  6  7    1
2  2  5  7  5  7    0
4  7  9  0  8  7    1
6  9  4  7  3  8    1
7  0  9  8  7  6    0

我想要一个看起来像这样的条形图 - :

我曾尝试使用 pandas 中的 hist() 函数,但我无法弄清楚如何在条形图中包含标签以获得如下图,就像图像中的那样。

【问题讨论】:

也许显示创建示例输入的命令很有用,这样我们就可以轻松地自己构建数据框并测试输出是否正确。 考虑你有上面的数据框。我用过 【参考方案1】:

我认为您需要 pivot 并按 cumcount 计数 最后一次通话DataFrame.plot.bar:

df = pd.pivot(index=df.groupby('label').cumcount(), columns=df.label, values=df.a).fillna(0)
print (df)
label    0    1
0      2.0  1.0
1      7.0  4.0
2      0.0  6.0

df.plot.bar()

或者可能需要聚合 size 并由 unstack 重塑:

df = df.groupby(['label', 'a']).size().unstack(0, fill_value=0)

df.plot.bar()

使用piRSquared 数据获得更好的样本:

【讨论】:

很酷 :-) 感谢您提出可视化 :)【参考方案2】:

试试

df.groupby('label').a.value_counts().unstack(0, fill_value=0).plot.bar()

考虑数据框df

np.random.seed([3,1415])
df = pd.DataFrame(
    np.random.randint(10, size=(50, 6)),
    columns=list('abcdef')
).assign(label=np.random.randint(2, size=50))

print(df.head())

   a  b  c  d  e  f  label
0  0  2  7  3  8  7      0
1  0  6  8  6  0  2      0
2  0  4  9  7  3  2      0
3  4  3  3  6  7  7      0
4  4  5  3  7  5  9      1

演示

df.groupby('label').a.value_counts().unstack(0, fill_value=0).plot.bar()

【讨论】:

它起作用了:-) df.groupby('label').a.value_counts().unstack(0, fill_value=0).plot.bar() 关于这一行,你是否建议阅读了解 value_counts() 函数的内容? @NiranjanAgnihotri value_counts 如果我要为数据集中的所有属性动态绘制相似的图表,我们在代码 df.groupby('label').a.value_counts() 行中使用了属性名称.unstack(0, fill_value=0).plot.bar() 如何为所有属性动态执行此操作?将属性名称作为字符串变量不起作用 @NiranjanAgnihotri df.groupby('label')['col_name'].value_counts().unstack(0, fill_value=0).plot.bar() 工作:-) 问候

以上是关于如何使用 Pandas 绘制条形图?的主要内容,如果未能解决你的问题,请参考以下文章

绘制 Pandas 多索引条形图

Pandas:如何绘制一个有两个类别和四个系列的条形图?

绘制堆积条形图

如何在 matplotlib pandas 的一张图中组合两个文件的两个条形图

使用 Pandas 在多个子图行中绘制条形图

使用 matplotlib 绘制堆积条形图,保持 pandas 数据框的顺序,因为它使用 python