计数带色调的堆积条形图

马切洛

我正在寻找一种根据“色相”绘制带有堆叠条形的计数图的有效方法。标准的色相行为是根据第二列的值将计数分成多个平行条,我正在寻找一种有效的方式来堆叠色相条以便快速比较总数。

让我用泰坦尼克号数据集的示例进行解释:

import pandas as pd
import numpy as np
import seaborn as sns
%matplotlib inline

df = sns.load_dataset('titanic')
sns.countplot(x='survived',hue='class',data=df)

给出带有计数图和色相的标准Seaborn行为 具有计数图和色相的标准Seaborn行为

我正在寻找的是类似每个色调的堆积条 色调相叠

为了获得最后一张图片,我使用了以下代码

def aggregate(rows,columns,df):
    column_keys = df[columns].unique()
    row_keys = df[rows].unique()

    agg = { key : [ len(df[(df[rows]==value) & (df[columns]==key)]) for value in row_keys]
               for key in column_keys }

    aggdf = pd.DataFrame(agg,index = row_keys)
    aggdf.index.rename(rows,inplace=True)

    return aggdf

aggregate('survived','class',df).plot(kind='bar',stacked=True)

我确信有一些更有效的方法。我知道seaborn并不是非常友好的堆叠式酒吧...所以我试图用我的函数重新排列数据集并使用matplotlib,但是我想还有一种更聪明的方法可以做到这一点。

非常感谢你!

洛兹

你基本上是有你的最后一部分,使用DataFrame.plot()barstacked=True

除了aggregate功能之外,您还可以使用groupby+来完成所需的操作pivot

df_plot = df.groupby(['class', 'survived']).size().reset_index().pivot(columns='class', index='survived', values=0)

class     First  Second  Third
survived                      
0            80      97    372
1           136      87    119

从这里您可以将其绘制为bar带有stacked=True参数的

df_plot.plot(kind='bar', stacked=True)

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章