You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Seaborn violinplot与boxplot半幅拼接的并列混合展示

Seaborn半小提琴图半箱线图拼接实现方案

核心逻辑是通过调整两种图表的宽度、显示区域和层级,让二者各占分组的一半空间,实现拼接效果,完整可运行代码如下:

首先导入依赖库:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

构造示例数据集(你提供的样例数据):

data = {
    "group": ["A"]*5 + ["B"]*5 + ["C"]*5,
    "points": [12.432848, 13.246483, 13.812403, 13.212260, 15.307191,
               13.464179, 11.695743, 12.197824, 13.892186, 9.586561,
               18.071026, 18.522597, 17.649151, 18.266435, 17.088155]
}
df = pd.DataFrame(data)

绘图代码:

plt.figure(figsize=(8, 5))

# 绘制左半部分小提琴图
sns.violinplot(
    data=df, x="group", y="points", hue="group",
    inner=None, split=True, width=0.5, cut=0
)

# 绘制右半部分箱线图
sns.boxplot(
    data=df, x="group", y="points", hue="group",
    width=0.25, showfliers=False, boxprops={"zorder": 2}, dodge=False
)

# 去除重复图例
plt.legend([], [], frameon=False)

plt.show()

关键参数说明

  • 小提琴图设置split=True且关闭内部默认的inner标记,仅渲染左半侧,宽度设为0.5刚好占分组区间的左半区域
  • 箱线图关闭dodge自动偏移,宽度设为0.25默认对齐分组右半区域,设置zorder=2保证箱线图层级更高,不会被小提琴图遮挡
  • 不需要显示离群点就保留showfliers=False,需要显示直接删除该参数即可

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:54:00