seaborn 多变量组条形图

Posted

技术标签:

【中文标题】seaborn 多变量组条形图【英文标题】:seaborn multiple variables group bar plot 【发布时间】:2018-09-05 10:10:33 【问题描述】:

我有 pandas 数据框、一个索引(日期时间)和三个变量(整数)

date        A   B       C
2017-09-05  25  261     31
2017-09-06  261 1519    151
2017-09-07  188 1545    144
2017-09-08  200 2110    232
2017-09-09  292 2391    325

我可以使用基本的熊猫图创建分组条形图。

df.plot(kind='bar', legend=False)

但是,我想在 Seaborn 或其他库中展示以提高我的技能。 我找到了非常接近的答案(Pandas: how to draw a bar plot with two categories and four series each?)。 在其建议的答案中,它的代码

ax=sns.barplot(x='', y='', hue='', data=data)

如果我将此代码应用于我的,我不知道我的 'y` 会是什么。

ax=sns.barplot(x='date', y=??, hue=??, data=data)

如何使用 Seaborn 或其他库绘制多个变量?

【问题讨论】:

始终提供问题的minimal reproducible example。生成可与 seaborn 一起使用的长格式数据集的标准方法确实是melt,如答案所示。如果这对您不起作用,那是因为用例不可重现,另请参阅How to make good reproducible pandas examples。顺便说一句。使用 seaborn 没有任何好处——它会产生完全相同的情节。 另外请每个问题问一个问题。关于图形大小,这将是 this question 的副本。因此,我编辑了您的第二个问题。 【参考方案1】:

如果想使用barplot,我认为需要melt

data = df.melt('date', var_name='a', value_name='b')
print (data)
          date  a     b
0   2017-09-05  A    25
1   2017-09-06  A   261
2   2017-09-07  A   188
3   2017-09-08  A   200
4   2017-09-09  A   292
5   2017-09-05  B   261
6   2017-09-06  B  1519
7   2017-09-07  B  1545
8   2017-09-08  B  2110
9   2017-09-09  B  2391
10  2017-09-05  C    31
11  2017-09-06  C   151
12  2017-09-07  C   144
13  2017-09-08  C   232
14  2017-09-09  C   325

ax=sns.barplot(x='date', y='b', hue='a', data=data)
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)

DataFrame.plot.barset_index 的 Pandas 解决方案:

df.set_index('date').plot.bar()

【讨论】:

我试过了,但我得到了 KeyError:datetime.date(2017, 9,5). And I don't think melt` 是我想要的。我只是想用Seaborn 或其他库将图形(我的问题中的照片)表达得更漂亮和可视化。 你用的是什么版本的seaborn? 我使用的是0.8.1版本 你真的很亲密data = df.reset_index().melt('date', var_name='a', value_name='b') 这个答案很好用,如果你打算用 barplot 绘制一个数据框,这就是答案

以上是关于seaborn 多变量组条形图的主要内容,如果未能解决你的问题,请参考以下文章

seaborn中的分组条形图

Python使用seaborn可视化分组条形图并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)

seaborn可视化绘制双变量分组条形图(Annotating Grouped Barplot: Side-by-side)添加数值标签进行标记

Python使用seaborn可视化分组条形图(side by side)并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)

用 Pandas 上的值注释条形图(在 Seaborn factorplot 条形图上)

删除 Seaborn 条形图图例标题