用seaborn FacetGrid映射两个子图

我正在尝试并排生成两个seaborn核密度图(kdeplot)。


这里使用了三个功能(社区学校?,经济需求指数,学校收入估算)。唯一的分类功能“社区学校?” 以代表其级别的绿蓝色显示。“经济需求指数”和“学校收入估算”分别适用于两个kdeplots。


使用下面显示的代码创建的图像是我可以获得的最佳结果,但是存在问题。


1)第二个图的y轴比例是错误的(应该像第一个图一样是一些整数比例)校正:kdeplot是规范的(所有的总和等于1),因此y轴在x值的情况下是正确的。


2)在两个图的下方产生一个额外的轴(?)


3)我想为每个子图添加一个标题


我发现kdeplot不支持,hue因此我尝试使其与一起使用FacetGrid。不知道这是否是正确的方法。如果提供了更好的方法,将不胜感激。


fig, (ax1, ax2) = plt.subplots(1, 2)

fig.subplots_adjust(wspace=.8)


fg = sns.FacetGrid(df, hue='Community School?', size=3)

fg.map(sns.kdeplot, 'Economic Need Index', shade=True, ax=ax1, label='Economic Need Index')

fg.map(sns.kdeplot, 'School Income Estimate', shade=True, ax=ax2, label='School Income Estimate')

plt.show()

http://img1.mukewang.com/607ea3c70001a11b10400911.jpg

GCT1015
浏览 244回答 3
3回答

www说

您会得到更多的数字,因为FacetGrid在调用时会自动打开其自己的窗口。有关更多详细信息,请参见此问题的答案。因此,这里是一种更简单的方法。我添加了两条可选行,用每种学校的均值替换NaN。s = df.groupby(['Community School?'])['School Income Estimate'].transform('mean')df['School Income Estimate'].fillna(s, inplace=True)plt.subplots(1, 2)plt.subplot(1, 2, 1)a = sns.kdeplot(df.loc[df['Community School?'] == 'No', 'Economic Need Index'], shade=True, label='No')b = sns.kdeplot(df.loc[df['Community School?'] == 'Yes', 'Economic Need Index'], color= 'red', shade=True, label='Yes')plt.title('KDE of Economic Need Index')plt.subplot(1, 2, 2)c = sns.kdeplot(df.loc[df['Community School?'] == 'No', 'School Income Estimate'], shade=True, label='No')d = sns.kdeplot(df.loc[df['Community School?'] == 'Yes', 'School Income Estimate'], color= 'red', shade=True, label='Yes')plt.title('KDE of School Income Estimate')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python