用线分隔 seaborn 中的小提琴图

Separating violinplots in seaborn with a line

我正在尝试使用 Seaborn 绘制多色调分布,但我发现这些图很难追溯到它们所属的刻度。我试图添加一个网格,但网格仅显示在分布的维度上,因此将分布本身分开,而不是将不同的分布彼此分开。是否可以让 Seaborn 在不同的小提琴图 groups/hues 之间添加一条网格线?为了说明这一点,请使用 docs 中的其中一张图。我已经在这个图中添加了我想看到的内容(出于说明目的,我已经将这些分隔符的宽度做得很重,在解决方案中我希望它们与网格线一样粗):

您可以使用 matplotlib 的 axvline 在位置 0.5、1.5、...绘制垂直线

import numpy as np
import seaborn as sns
sns.set(style="whitegrid")

tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", hue="smoker",
                    data=tips, palette="muted")
for i in range(len(np.unique(tips['day'])) - 1):
    ax.axvline(i + 0.5, color='grey', lw=1)
plt.show()

或者,您可以在这些位置设置次刻度并为 x 轴打开次网格线。