从 Pandas DataFrame 绘制条形图

Posted

技术标签:

【中文标题】从 Pandas DataFrame 绘制条形图【英文标题】:Plot bar graph from Pandas DataFrame 【发布时间】:2015-06-12 11:12:13 【问题描述】:

假设我有一个看起来像这样的DataFrame

Hour | V1 | V2 | A1 | A2
 0   | 15 | 13 | 25 | 37  
 1   | 26 | 52 | 21 | 45 
 2   | 18 | 45 | 45 | 25 
 3   | 65 | 38 | 98 | 14

我正在尝试创建一个条形图来比较 Hour 的列 V1V2。 当我这样做时:

import matplotlib.pyplot as plt
ax = df.plot(kind='bar', title ="V comp",figsize=(15,10),legend=True, fontsize=12)
ax.set_xlabel("Hour",fontsize=12)
ax.set_ylabel("V",fontsize=12)

我得到一个带有所有列的值和名称的图和图例。如何修改我的代码,以便绘图和图例仅显示列 V1V2

【问题讨论】:

首先子选择感兴趣的列会不会提供您想要的东西:ax = df[['V1','V2']].plot(kind='bar', title ="V comp",figsize=(15,10),legend=True, fontsize=12) @EdChum 我一直在尝试这条线,但我一直收到错误消息。我使用pandas.pydata.org/pandas-docs/version/0.15.2/visualization.html 作为参考,但找不到我需要的示例。但你是对的。如果你回答我可以接受。如果你可以添加[ [ ] ]语法的解释,因为我在做ax = df['V1','V2'] 【参考方案1】:

要仅绘制所选列,您可以通过将列表传递给下标运算符来选择感兴趣的列:

ax = df[['V1','V2']].plot(kind='bar', title ="V comp", figsize=(15, 10), legend=True, fontsize=12)

您尝试的是df['V1','V2'],这将引发KeyError,因为该标签不存在正确的列,尽管起初看起来很有趣,但您必须考虑到您正在传递一个列表,因此双方括号[[]] .

import matplotlib.pyplot as plt
ax = df[['V1','V2']].plot(kind='bar', title ="V comp", figsize=(15, 10), legend=True, fontsize=12)
ax.set_xlabel("Hour", fontsize=12)
ax.set_ylabel("V", fontsize=12)
plt.show()

【讨论】:

恭喜获得熊猫金币!! @AndyHayden 感谢 Andy 我仍然觉得我还有很多东西要学 好的,你会如何为每个系列添加相关的误差线? @CF84 你应该发布一个问题而不是通过 cmets 提问,因为这对 SO 社区没有帮助

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

按小时重新采样 Pandas DataFrame 并使用 Plotly 绘制堆积条形图

在同一张图表上将 Pandas DataFrame 绘制为 Bar 和 Line

在条形图条上重复填充图像(条形自定义)

Pandas Dataframe 到 Seaborn 分组条形图

没有 NaN 值空间的 Pandas 绘图条

在同一轴上绘制多个条形图