我用Facetgrid计数图绘制了打击图。但是,我无法并排制作色调条。
g = sns.FacetGrid(titanic_df, row='Pclass', hue='Survived', size=2, aspect=2.5, sharex=False, sharey=False)
g.map(sns.countplot, 'Tclass', alpha=.6)
g.fig.suptitle('Distribution of Survival by Ticket Prefix and Ticket Class', fontsize=9.5, y=1.01)
g.set_xlabels('Ticket Prefix')
g.fig.text(0, .5, 'Ticket Prefix', va='center', rotation='vertical', fontsize=9.5)
g.add_legend()
所以我尝试使用Factorplot,它失败了,因为它没有过滤那个 Pclass 中不存在的Ticket Prefix( Tclass )。
g = sns.factorplot(x='Tclass', data=titanic_df, row='Pclass', hue='Survived', kind='count', size=2, aspect=2.5, sharex=False, sharey=False)
我该怎么办? :(
答案 0 :(得分:1)
我没有设法在Facetgrid中制作它,但我手动使用Matplotlib子图进行了这项操作。它并不聪明,但至少我得到了我想要的东西。
请与我分享更聪明的方法来达到同样的效果!谢谢!
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=[10,6])
g1 = sns.countplot(x='Tclass', hue='Survived', data=titanic_df[titanic_df.Pclass == 1], ax=ax1)
g2 = sns.countplot(x='Tclass', hue='Survived', data=titanic_df[titanic_df.Pclass == 2], ax=ax2)
g3 = sns.countplot(x='Tclass', hue='Survived', data=titanic_df[titanic_df.Pclass == 3], ax=ax3)
g1.set_title('Pclass = 1', fontsize=9.5, y=.85)
g2.set_title('Pclass = 2', fontsize=9.5, y=.85)
g3.set_title('Pclass = 3', fontsize=9.5, y=.85)
g1.set_xlabel(''); g2.set_xlabel(''); g3.set_xlabel('Ticket Prefix')
g1.set_ylabel(''); g2.set_ylabel('Frequency'); g3.set_ylabel('')
g1.legend(''); g3.legend('')
leg = g2.legend(fontsize='small', loc='center left', bbox_to_anchor=(1, 0.5))
leg.set_title('Ticket Prefix', prop={'size':'small'})
fig.suptitle('Distribution of Survival by Ticket Prefix and Ticket Class', fontsize=9.5, y=.94)
答案 1 :(得分:1)
factorplot
确实会在其所有子图中使用所有可能的x
值。因此,可能需要使用Facetgrid
。问题是hue
的{{1}}会使每个单独的类别在图上单独绘制,因此条形将重叠。您想要的是使用Facetgrid
的{{1}}来获取分组条形图。问题是map函数无法正确识别hue
参数。因此,您可以编写自己的映射函数,将countplot
作为参数。
hue
答案 2 :(得分:1)
map_dataframe
是对我有用的技巧。您必须添加当前颜色调色板作为其参数。
g = sns.FacetGrid(titanic_df, row='Pclass', size=2, aspect=2.5, sharex=False, sharey=False)
g.map_dataframe(sns.countplot, 'Tclass', hue='Survived', palette=sns.color_palette()).add_legend()