Python堆叠了barplot(带有pandas交叉表)以及FacetGrid用于多列

问题描述 投票:1回答:2

我正在尝试用pandas交叉表获得刻面叠加的条形图。请检查以下代码

    #Prepare DataFrame
    n = 500
    gender = np.random.choice(['Male','Female'], n)
    mark = np.random.choice([True,False], n)
    periods = np.random.choice(['BASELINE','WEEK 12', 'WEEK 24', 'WEEK 4'], n)
    df = pd.DataFrame({'gender':gender,'mark':mark,'period':periods})

熊猫交叉涂鸦和密谋

ct = pd.crosstab([df.period, df.gender],df.mark)
ct.plot.bar(stacked=True)
plt.show()

我在上面的代码后得到的情节: The plot I get after above code

我想要的是,我可以使用FacetGrid按性别划分这个情节吗?

像下面的代码(不起作用)

g = sns.FacetGrid(ct, col="gender")
g = (g.map(ct.plot.bar, stacked=True))
python pandas crosstab stacked-chart facet-grid
2个回答
1
投票

我无法将堆积的条形图与seaborn qazxsw poi结合起来。很高兴看到有人可以。

与此同时,我有这个:

FacetGrid

这给了你# make data n = 500 gender = np.random.choice(['Male','Female'], n) mark = np.random.choice([True,False], n) periods = np.random.choice(['BASELINE','WEEK 12', 'WEEK 24', 'WEEK 4'], n) df = pd.DataFrame([periods, gender, mark]).T df.columns = ['period','gender', 'mark'] ct = pd.crosstab([df.period, df.gender],df.mark) #clean the index ct = ct.reset_index() ct.columns = ['period', 'gender', 'False', 'True'] g = sns.FacetGrid(ct, col='gender', hue='gender') g = (g.map(sns.barplot, 'period', 'False', order=['BASELINE', 'WEEK 4', 'WEEK 12', 'WEEK 24'])) ,你可以重复True:

False

更好的是enter image description here,它给你集群条:

catplot

ct = ct.melt(id_vars=['period', 'gender']) g = sns.catplot(x="period", y="value", hue="variable", col='gender', data=ct, kind="bar", height=4, aspect=2);


1
投票

Seaborn不会添加叠加的条形图功能enter image description here

您需要自己处理,使用matplotlib子图并伪造数据框以满足您的需求。

引用:

我注意到seaborn.barplot不包含堆叠参数,我认为这将是一个很好的功能包括。

我完全不同意,抱歉。

所以这个功能不会很快出现。正式。然而同样的问题as stated in this closed and refused issue(我还没有测试过,我会尽快将手放在电脑上)

引用contains a workaround的代码:

pgromano
© www.soinside.com 2019 - 2024. All rights reserved.