带有分组条形的熊猫堆积条形图[重复]

Posted

技术标签:

【中文标题】带有分组条形的熊猫堆积条形图[重复]【英文标题】:Pandas stacked barplot with grouped bars [duplicate] 【发布时间】:2015-06-28 11:43:00 【问题描述】:

我的数据如下所示:

   topic  positive  negative     type
0     88  0.080000  0.030000   source
1     36  0.010000  0.200000   source
2    101  0.350000  0.040000   source
3     78  0.110000  0.090000   source
4     99  0.110000  0.010000   source
5     79  0.000000  0.050000   source
6     24  0.000000  0.160000   source
7     17  0.000000  0.410000   source
8     14  0.090000  0.050000   source
9     29  0.060000  0.030000   source
0     14  0.207071  0.085859  summary
1     17  0.000000  0.738889  summary
2     24  0.000000  0.219349  summary
3     29  0.000000  0.094907  summary
4     36  0.000000  0.255808  summary
5     78  0.108333  0.194444  summary
6     79  0.000000  0.106443  summary
7     88  0.089286  0.041667  summary
8     99  0.098496  0.050877  summary
9    101  0.444444  0.055556  summary

我需要绘制一个条形图,比较每个 topic 的不同 type 的正/负值。我认为它就像 x 轴上带有 topic 的堆叠(正/负)条形图,条形图使用 type 列分组。但我找不到同时构建分组和堆叠条形图的方法。

对于像这样的单一类型(对不起,我没有足够的声誉来发布图片):

polar_data.set_index(['type', 'topic']).xs('summary').plot(kind='bar', stacked=True)

我目前可以比较两种不同类型的唯一方法是使用seaborn.factorplot 并排放置两个图,这无法清楚地注意到趋势。而且我不知道如何使用seaborn 构建堆积条形图。

print_data = pd.melt(polar_data, id_vars=['topic', 'type'], value_name='percent', var_name='polarity')
sns.factorplot("topic", 'percent', 'polarity', row="type", data=print_data, margin_titles=True, kind='bar')

那么有没有办法将它们“合并”而不是并排放置?

【问题讨论】:

我在这里有点困惑。您打算如何比较正值和负值? @JohnGalt 让我解释一下。我想要这样的情节here负/正值堆叠在一起,每个主题有两个这样的条(一个是“摘要”类型,另一个是“源”类型)它们应该彼此靠近分组.所以每个主题都有一组 【参考方案1】:

这是使用 matplotlib 的一种方法。我猜 seaborn 会使用相同的结构。

In [3]: polar_data.pivot('topic', 'type')
Out[3]:
       positive            negative
type     source   summary    source   summary
topic
14         0.09  0.207071      0.05  0.085859
17         0.00  0.000000      0.41  0.738889
24         0.00  0.000000      0.16  0.219349
29         0.06  0.000000      0.03  0.094907
36         0.01  0.000000      0.20  0.255808
78         0.11  0.108333      0.09  0.194444
79         0.00  0.000000      0.05  0.106443
88         0.08  0.089286      0.03  0.041667
99         0.11  0.098496      0.01  0.050877
101        0.35  0.444444      0.04  0.055556

所以,现在你可以做正值 -

polar_data.pivot('topic', 'type')['positive'].plot(kind='bar', stacked=True)

对于,你可以做的负值 -

polar_data.pivot('topic', 'type')['negative'].plot(kind='bar', stacked=True)

【讨论】:

以上是关于带有分组条形的熊猫堆积条形图[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何创建按 2 个类别分组的堆积条形图

情节堆积条形图熊猫数据框

ggplot2:3路交互堆积条形图的分组条形图

Pandas 并排堆积条形图

Pandas 堆积条形图为大型图例重复颜色

python中堆积百分比条形图的问题[重复]