Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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中制作100%堆叠面积图的facetgrid?_Python_Matplotlib_Data Visualization_Seaborn - Fatal编程技术网

如何在Python中制作100%堆叠面积图的facetgrid?

如何在Python中制作100%堆叠面积图的facetgrid?,python,matplotlib,data-visualization,seaborn,Python,Matplotlib,Data Visualization,Seaborn,下面是我用很长的代码制作的 这是代码中的交叉表 这就是它处理分裂的方式 但是我必须在我的代码中做两次,因为我需要一个曲线图来表示surved=0,一个曲线图来表示surved=1 如何用更短的代码量达到相同的效果?我觉得制作子图、一个接一个地绘制和定制它们非常愚蠢。您可以将轴设置为列表,使用列表理解来设置ddf\u Pclass\u Sex数组,然后循环它们(以减少对xlabel、XTick和set title的重复调用)。否则我想你需要打电话给其他人 fig, axs = plt.su

下面是我用很长的代码制作的

这是代码中的交叉表

这就是它处理分裂的方式

但是我必须在我的代码中做两次,因为我需要一个曲线图来表示surved=0,一个曲线图来表示surved=1



如何用更短的代码量达到相同的效果?我觉得制作子图、一个接一个地绘制和定制它们非常愚蠢。

您可以将轴设置为列表,使用列表理解来设置ddf\u Pclass\u Sex数组,然后循环它们(以减少对xlabel、XTick和set title的重复调用)。否则我想你需要打电话给其他人

fig, axs = plt.subplots(1, 2, figsize=[7,2], sharex=True, sharey=True)
ddf_Pclass_Sex = [pd.crosstab(titanic_df[titanic_df.Survived == i].Pclass, 
                              titanic_df[titanic_df.Survived == i].Sex) for i in range(2)]

for i, d, axs in enumerate(zip(ddf_Pclass_Sex, axs)):
    d.divide(d.sum(axis=1), axis=0).plot.area(stacked=True, 
                                              ax=ax, 
                                              color=['#55A868', '#4C72B0'])
    ax.set_title('Survived = ' + str(i), fontsize=9.5)
    ax.set_xlabel('')
    ax.set_xticks(np.arange(1, 4, 1))

ax[0].set_ylabel('Percent (%)')
leg = axs[1].legend(fontsize='small', loc='center left', bbox_to_anchor=(1, 0.5))
leg.set_title('Sex', prop={'size':'small'})
fig.suptitle('Sex Composition in Percentage by Ticket Class', 
             fontsize=9.5, y=1.06)
fig.text(.5, -.05, 'Ticket Class', ha='center', fontsize=9.5)
plt.show()

抱歉,没有数据帧无法运行。根据我的经验,实际上更好的做法是让代码更像以前一样。即使它更长,当你以后需要调整时,它也会让你变得更容易;所有内容都是明确的,如果您想在两个绘图中有所不同,可以很容易地进行更改。

您可以将轴设置为列表,使用列表理解设置ddf\u Pclass\u Sex数组,然后在其上循环(以减少对xlabel、xticks和set title的重复调用)。否则我想你需要打电话给其他人

fig, axs = plt.subplots(1, 2, figsize=[7,2], sharex=True, sharey=True)
ddf_Pclass_Sex = [pd.crosstab(titanic_df[titanic_df.Survived == i].Pclass, 
                              titanic_df[titanic_df.Survived == i].Sex) for i in range(2)]

for i, d, axs in enumerate(zip(ddf_Pclass_Sex, axs)):
    d.divide(d.sum(axis=1), axis=0).plot.area(stacked=True, 
                                              ax=ax, 
                                              color=['#55A868', '#4C72B0'])
    ax.set_title('Survived = ' + str(i), fontsize=9.5)
    ax.set_xlabel('')
    ax.set_xticks(np.arange(1, 4, 1))

ax[0].set_ylabel('Percent (%)')
leg = axs[1].legend(fontsize='small', loc='center left', bbox_to_anchor=(1, 0.5))
leg.set_title('Sex', prop={'size':'small'})
fig.suptitle('Sex Composition in Percentage by Ticket Class', 
             fontsize=9.5, y=1.06)
fig.text(.5, -.05, 'Ticket Class', ha='center', fontsize=9.5)
plt.show()
抱歉,没有数据帧无法运行。根据我的经验,实际上更好的做法是让代码更像以前一样。即使它更长,当你以后需要调整时,它也会让你变得更容易;一切都是明确的,可以很容易地改变事情,如果你想在两个情节的差异