Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用seaborn FaceGrid映射两个子地块_Python_Seaborn - Fatal编程技术网

Python 使用seaborn FaceGrid映射两个子地块

Python 使用seaborn FaceGrid映射两个子地块,python,seaborn,Python,Seaborn,我试图同时生成两个seaborn内核密度图(kdeplot) 这里使用了三个特征(社区学校?、经济需求指数、学校收入估算)。唯一的分类特征“社区学校”显示为代表其等级的绿蓝色“经济需求指数”和“学校收入估算”分别适用于两个KDE地块 使用下面显示的代码创建的图像是我能得到的最佳结果,但它有问题 1) 第二个绘图的y轴比例错误(它应该是与第一个绘图类似的整数比例)更正:kdeplot已赋范(所有项合计为1),因此y轴在给定其x值时是正确的 2) 沿两个图下方产生一个额外的轴(?) 3) 我想为每个

我试图同时生成两个seaborn内核密度图(
kdeplot

这里使用了三个特征(社区学校?、经济需求指数、学校收入估算)。唯一的分类特征“社区学校”显示为代表其等级的绿蓝色“经济需求指数”和“学校收入估算”分别适用于两个KDE地块

使用下面显示的代码创建的图像是我能得到的最佳结果,但它有问题

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()


并且可以找到完整的数据集。

您将获得额外的数字,因为FaceGrid在调用时会自动打开自己的窗口。有关更多详细信息,请参阅此问题的答案。因此,这里有一个更简单的方法。我添加了两条可选行,用每种类型学校的平均数替换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')

考虑将数据框合并为一个值列和一个指标列,用于经济需求指标和学校收入估计。然后,在不使用matplotlib的
子绘图()调用的情况下进行绘图,仅使用seaborn的
FaceGrid
并调整默认绘图属性:

long_df = pd.melt(df, id_vars='Community School?', var_name='Indicator', value_name='value')
print(long_df.head())
#       Community School?            Indicator  value
# 0                   Yes  Economic Need Index  0.919
# 1                    No  Economic Need Index  0.641
# 2                    No  Economic Need Index  0.744
# 3                    No  Economic Need Index  0.860
# 4                    No  Economic Need Index  0.730

fg = sns.FacetGrid(long_df, col='Indicator', hue='Community School?', 
                       sharex=False, sharey=False, size=4)
fg.map(sns.kdeplot, 'value', shade=True, label='Data')\
         .add_legend()\
         .set_titles("{col_name}")\
         .set_axis_labels('')
plt.show()

plt.clf()
plt.close('all')

long_df = pd.melt(df, id_vars='Community School?', var_name='Indicator', value_name='value')
print(long_df.head())
#       Community School?            Indicator  value
# 0                   Yes  Economic Need Index  0.919
# 1                    No  Economic Need Index  0.641
# 2                    No  Economic Need Index  0.744
# 3                    No  Economic Need Index  0.860
# 4                    No  Economic Need Index  0.730

fg = sns.FacetGrid(long_df, col='Indicator', hue='Community School?', 
                       sharex=False, sharey=False, size=4)
fg.map(sns.kdeplot, 'value', shade=True, label='Data')\
         .add_legend()\
         .set_titles("{col_name}")\
         .set_axis_labels('')
plt.show()

plt.clf()
plt.close('all')