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

Eda*_*ame 32 python matplotlib bar-chart python-3.x pandas

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

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

情节很好.但是,我希望通过在列表中包含3列:'col_A','col_B'和'col_C'来改进图形.如下图所示:

在此输入图像描述

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

Imp*_*est 76

您可以通过提供列名的列表,以情节一次几列ploty说法.

df.plot(x="X", y=["A", "B", "C"], kind="bar")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这将生成一个图形,其中条形图彼此相邻.

为了使它们重叠,您需要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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 只有当最高值来自为所有条形绘制的第一列的值时,第二个图才有意义。问题的预期输出似乎就是这种情况。否则我不建议使用这种图,而是使用堆叠图或此处第一个解决方案中的分组条。当然,可以尝试透明度(`alpha`),看看后一种解决方案是否给出了吸引人的结果。 (2认同)

ayo*_*rgo 7

尽管接受的答案可以正常工作,但是从v0.21.0rc1开始,它会给出警告

UserWarning:Pandas不允许通过新的属性名称创建列

相反,一个人可以做

df[["X", "A", "B", "C"]].plot(x="X", kind="bar")
Run Code Online (Sandbox Code Playgroud)