matplotlib:在条形图上绘制多列熊猫数据框

Posted

技术标签:

【中文标题】matplotlib:在条形图上绘制多列熊猫数据框【英文标题】:matplotlib: plot multiple columns of pandas data frame on the bar chart 【发布时间】:2022-01-20 22:18:12 【问题描述】:

我正在使用以下代码绘制条形图:

import matplotlib.pyplot as pls 
my_df.plot(x='my_timestampe', y='col_A', kind='bar') 
plt.show()

剧情不错。但是,我想通过在图上添加 3 列来改进图表:“col_A”、“col_B”和“col_C”。如下图示例:

我希望col_A 在 x 轴上方显示为蓝色,col_B 在 x 轴下方显示为红色,col_C 在 x 轴上方显示为绿色。这在 matplotlib 中可能吗?如何进行更改以绘制所有三列?谢谢!

【问题讨论】:

import matplotlib.pyplot as pls --> as plt 【参考方案1】:

您可以通过向ploty 参数提供列名列表来一次绘制多个列。

df.plot(x="X", y=["A", "B", "C"], kind="bar")

这将产生一个图表,其中条形图彼此相邻。

为了使它们重叠,您需要多次调用plot,并提供要绘制的坐标轴作为参数ax 到绘图。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

y = np.random.rand(10,4)
y[:,0]= np.arange(10)
df = pd.DataFrame(y, columns=["X", "A", "B", "C"])

ax = df.plot(x="X", y="A", kind="bar")
df.plot(x="X", y="B", kind="bar", ax=ax, color="C2")
df.plot(x="X", y="C", kind="bar", ax=ax, color="C3")

plt.show()

【讨论】:

第二个图只有在最高值是为所有条绘制的第一列中的值时才有意义。问题的所需输出似乎就是这种情况。否则,我不建议使用这种图,而是使用堆叠图或此处第一个解决方案中的分组条。当然,可以尝试透明度 (alpha),看看后一种解决方案是否会产生吸引人的结果。 此答案被标记为正确,但应使用@ageorge 的答案进行更新,因为在较新的版本中它会引发警告 @ekauffmann 我无法重现此内容。即使在最新版本的熊猫(0.23.3)中,这也不会对我产生警告。你用的是哪个版本?【参考方案2】:

虽然接受的答案可以正常工作,但由于 v0.21.0rc1 它会发出警告

用户警告:Pandas 不允许通过新属性名称创建列

相反,我们可以做到

df[["X", "A", "B", "C"]].plot(x="X", kind="bar")

【讨论】:

x='X' 它到底是什么?? @Akash Desai:它告诉 pandas 要在 x 轴上绘制的列的名称(在本例中为“X”)。

以上是关于matplotlib:在条形图上绘制多列熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 在单个条形图上绘制多列 [重复]

python使用matplotlib绘制水平条形图并在条形图上添加实际数值标签实战

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

如何绘制熊猫数据框的多列

如何在 matplotlib 中绘制我的熊猫数据框 [重复]

同一图上 Pandas 数据框多列的箱线图(seaborn)