pandas 如何绘制两类四列条形图

esyap4oy  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(135)

我有以下数据框,其中pd.concat用于对列进行分组:

a               b            
   C1  C2  C3  C4  C5  C6  C7  C8
0  15  37  17  10   8  11  19  86
1  39  84  11   5   5  13   9  11
2  10  20  30  51  74  62  56  58
3  88   2   1   3   9   6   0  17
4  17  17  32  24  91  45  63  48

现在我想画一个条形图,其中我只有两个类别(ab),每个类别有四个条形代表每列的平均值。列C1和C5应该具有相同的颜色,列C2和C6也应该具有相同的颜色,依此类推。

如何使用 df.plot.bar()实现?

该图应该类似于下图。抱歉,它是手绘的,但我很难找到一个相关的例子:

编辑

这是我的实际DataFrame的头:

C1  C2  C3  C4  C5  C6  C7  C8
0   34  34  34  34  6   40  13  26
1   19  19  19  19  5   27  12  15
2   100 100 100 100 0   0   0   0
3   0   0   0   0   0   0   0   0
4   100 100 100 100 0   0   0   0
bvjveswy

bvjveswy1#

您可以在计算DFmean之后简单地执行unstack来呈现条形图。

import seaborn as sns
sns.set_style('white')

#color=0.75(grey)
df.mean().unstack().plot.bar(color=list('rbg')+['0.75'], rot=0, figsize=(8,8))

数据:(根据编辑后的帖子)

df

通过根据列的选择(这里是4)重复标签来创建额外的列,从而准备多索引DF

df_multi_col = df.T.reset_index()
df_multi_col['labels'] = np.concatenate((np.repeat('A', 4), np.repeat('B', 4)))
df_multi_col.set_index(['labels', 'index'], inplace=True)
df_multi_col

df_multi_col.mean(1).unstack().plot.bar(color=list('rbg')+['0.75'], rot=0, figsize=(6,6), width=2)

t3psigkw

t3psigkw2#

试试seaborn

import seaborn as sns
import pandas as pd

def r(df):
    return df.loc[df.name].reset_index(drop=True)

data = df.mean().groupby(level=0).apply(r) \
         .rename_axis(['grp', 'cat']).reset_index(name='mu')

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

ax.legend_.remove()
for i, p in enumerate(ax.patches):
    height = p.get_height()
    ax.text(p.get_x() + .05, height + 1, df.columns.levels[1][i])

相关问题