我正在尝试用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()
我想要的是,我可以使用FacetGrid按性别划分这个情节吗?
像下面的代码(不起作用)
g = sns.FacetGrid(ct, col="gender")
g = (g.map(ct.plot.bar, stacked=True))
我无法将堆积的条形图与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
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);
您需要自己处理,使用matplotlib子图并伪造数据框以满足您的需求。
引用:
我注意到seaborn.barplot不包含堆叠参数,我认为这将是一个很好的功能包括。
我完全不同意,抱歉。
所以这个功能不会很快出现。正式。然而同样的问题as stated in this closed and refused issue(我还没有测试过,我会尽快将手放在电脑上)
引用contains a workaround的代码:
pgromano