gpt4 book ai didi

python - 每个色调带有堆叠条的计数图

转载 作者:行者123 更新时间:2023-12-03 14:59:46 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to have clusters of stacked bars with python (Pandas)

(8 个回答)


2年前关闭。




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

让我用一个来自泰坦尼克号数据集的例子来解释:

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 行为
Standard Seaborn behavior with countplot and hue

我正在寻找的是类似于每个色调的堆叠条
Stacked bars per hue

为了获得最后一张图片,我使用了以下代码
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

从这里您可以将其绘制为 barstacked=True论证
df_plot.plot(kind='bar', stacked=True)

enter image description here

关于python - 每个色调带有堆叠条的计数图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50319614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com