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】:
您可以通过向plot
的y
参数提供列名列表来一次绘制多个列。
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:在条形图上绘制多列熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章
python使用matplotlib绘制水平条形图并在条形图上添加实际数值标签实战
如何在 matplotlib pandas 的一张图中组合两个文件的两个条形图