如何手动缩放 Seaborn Violinplot 的计数

Posted

技术标签:

【中文标题】如何手动缩放 Seaborn Violinplot 的计数【英文标题】:How to manually scale count of Seaborn Violinplot 【发布时间】:2021-04-09 04:50:42 【问题描述】:

我在 Python 中使用 Seaborn 来制作分割小提琴图。问题是我的两种色调中的一种的数量要少得多,当与另一种色调并排时几乎察觉不到。

我的问题是如何添加一个乘数来缩放小提琴分裂一侧的计数?

这是我正在做的事情的文档:

这是它目前对我的影响:

最后,我希望能够清楚地看到小提琴右侧的总数量要少得多,同时仍能描绘出它的分布。

【问题讨论】:

你可以把scale参数改成area甚至width,但恐怕不能同时有countarea的效果 最好是写代码而不是图片。 【参考方案1】:

我建议您通过显示难以感知的小提琴图一半的放大视图来解决此问题。这可以通过使用inset axes 来完成。这是一个基于您从seaborn docs 分享的示例:

import seaborn as sns  # v 0.11.0

# Import sample dataset and generate seaborn violinplot
tips = sns.load_dataset('tips')
ax = sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, palette="Set2",
                    split=True, scale="count", inner="stick", scale_hue=False, bw=.2)
ax.figure.set_size_inches(10,4)
ax.legend(loc='upper left', frameon=False)

# Create inset axes to zoom in on violinplot showing 'day'='Fri' & 'sex'='Female'
tips_fri_fem = tips[(tips['day']=='Fri') & (tips['sex']=='Female')]
axins = ax.inset_axes([0.44, 0.1, 0.06, 0.8])
sns.violinplot(data=tips_fri_fem, x='sex', y="total_bill", hue="sex",
               palette="Set2", split=True, scale="count", inner="stick",
               scale_hue=False, bw=.2, ax=axins)
axins.set_xlim(1, 1.5)
axins.set_ylim(0, 30)
axins.set_xlabel('')
axins.set_ylabel('')
axins.set_xticklabels('')
axins.legend().remove()

# Add rectangle without the connector lines to indicate area that is enlarged
rect, lines = ax.indicate_inset_zoom(axins, alpha=0.8)
rect.set_bounds(*rect.get_xy(), 0.1, 30)
for line in lines:
    line.remove()

【讨论】:

以上是关于如何手动缩放 Seaborn Violinplot 的计数的主要内容,如果未能解决你的问题,请参考以下文章

seaborn使用violinplot函数可视化水平小提琴图(Make Horizontal Violin Plot with violinplot in Seaborn)

Seaborn violinplot 透明度

seaborn使用violinplot函数可视化小提琴图并在violinplot函数中设置inner参数来添加数据点显示数据的稠密程度

seaborn violinplot 和 boxplot 并排

seaborn使用Catplot函数可视化分组小提琴图( Grouped Violinplot with Seaborn Catplot)并保存可视化结果

Python使用matplotlib可视化小提琴图seaborn中的violinplot函数可视化多分类变量的小提琴图(Violin Plot)