首页 > 解决方案 > 如何将 seaborn 的 catplot 绘制到 gridspec

问题描述

我制作了一个 2x2 gridspec 并尝试在第二行中绘制 catplot,如下所示:

fig = plt.figure(figsize=(10,5), constrained_layout=True)
gs = GridSpec(nrows=2, ncols=2, figure=fig)

# Chart 1
ax1 = fig.add_subplot(gs[0,0]) 

ax1=sns.countplot(x='product', data = df)    #Countplot 
plt.title('Product sales', fontweight='bold', fontsize = 8)
plt.ylabel('Count', fontsize = 7)
plt.xlabel('Product', fontsize = 7)

# Chart 2
ax2 = fig.add_subplot(gs[0,1]) 
ax2= sns.countplot(x='maritalstatus', data = df)    #Countplot 
plt.title('Marital status of customers', fontweight='bold', fontsize = 8)
plt.ylabel('', fontsize = 7)
plt.xlabel('Marital status', fontsize = 7)

# chart 3
ax2 = fig.add_subplot(gs[1,:]) 
ax3 = sns.catplot(x = 'product', hue = "gender", col = "maritalstatus", data = df, kind = 'count')

plt.show()

但是第二行不是由 catplot 绘制的,而是出现在空白图的下方。

输出: 在此处输入图像描述

标签: pandasdataframematplotlibjupyter-notebookseaborn

解决方案


不幸的是,catplot是图形级界面,而不是轴级界面,因此您不能以这种方式绘制它。这是其他图形级接口(例如 )的常见问题,displot我发现的解决方法是单独使用底层组件(displot特别是它kdeplot和直方图,因为catplot您必须查看源代码)。

您可以通过观察它们在调用中是否接受 ax 参数来判断哪些接口是图形或轴级别的。在您的情况下,您可以浏览文档以查看支持哪些绘图以及实现细节的源代码。


推荐阅读