如何将 seaborn 的 catplot 绘制到 gridspec
Posted
技术标签:
【中文标题】如何将 seaborn 的 catplot 绘制到 gridspec【英文标题】:How to plot seaborn's catplot to gridspec 【发布时间】:2021-09-29 20:52:46 【问题描述】:我制作了一个 2x2 网格规范,并尝试在第二行中绘制 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绘制的,而是出现在空白图下方。
输出:
【问题讨论】:
【参考方案1】:很遗憾,catplot
是图形级别的界面,而不是轴级别的界面,因此您不能以这种方式绘制它。这是其他图形级接口(例如displot
)的常见问题,我发现的解决方法是单独使用底层组件(对于displot
,特别是kdeplot
和直方图,对于catplot
,您将必须查看源代码)。
您可以通过观察它们在调用中是否接受 ax 参数来判断哪些接口是图形或坐标轴级别的。在您的情况下,您可以探索 the documentation 以查看支持哪些绘图,还可以通过 the source code 了解实施细节。
【讨论】:
以上是关于如何将 seaborn 的 catplot 绘制到 gridspec的主要内容,如果未能解决你的问题,请参考以下文章
Seaborn 如何在 sns.catplot 中添加每个类别的样本数
seaborn使用Catplot函数可视化水平小提琴图(Make Horizontal Violin Plot with Catplot in Seaborn)
seaborn使用Catplot函数可视化分组小提琴图( Grouped Violinplot with Seaborn Catplot)并保存可视化结果