PAYATHON 2026

Seaborn 如何在同一分类轴上绘制多个 hue 的分裂小提琴图?

数据小陈

结论

可以。Seaborn 从 0.13.0 开始,violinplot(split=True) 支持两个以上的 hue 类别。绘图时,各类别会交替显示在中心轴两侧。要让它们共用同一个 X 轴类别位置,请将 dodge 设为 False。dodge=True 会沿分类轴错开不同 hue 对应的图形,因此调整 gap 不能让它们回到同一中心位置。Seaborn 0.13.0 更新说明 violinplot 文档

示例

import seaborn as sns

sns.violinplot(
    data=df_test,
    x="X-Axis Category",
    y="Y-Axis Value",
    hue="Hue Category",
    hue_order=["Hue-1", "Hue-2", "Hue-3", "Hue-4"],
    palette=Hue_Palette_Dict,
    split=True,
    dodge=False,
    gap=0,
    inner=None,
)

hue_order 用来固定类别顺序,调色板字典则将颜色映射到指定的 hue 类别。将示例中的类别顺序换成实际数据里的类别即可。split=True 会把每个 hue 的分布画成半边小提琴,并在中心轴两侧交替排列,所以即使类别数量是奇数,也不需要额外添加空类别。

版本与布局注意事项

Seaborn 早于 0.13.0 的版本不支持对多个 hue 类别使用 split=True。如果项目允许,可以升级 Seaborn;如果无法升级,则需要用 Matplotlib 等方式自行绘制半边分布,或继续分组绘图并手动调整位置。

dodge=False 会让不同 hue 共用分类位置,但同侧的半边分布可能互相覆盖。可以通过 hue_order 和配色区分类别,并先用小数据集确认效果。原代码中的 alpha 和 edgecolor 只控制绘图样式,不会改变类别是否错开。如果这些样式参数在当前版本中的表现不符合预期,可以先移除它们,确认布局后再逐项添加。

备注:内容仅供参考。