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

如何在Seaborn catplot中调整箱线图的样式特征?

解决Seaborn catplot箱线图的线宽与分组间距调整问题

一、调整箱线线宽

catplot支持通过boxprops参数直接传递底层boxplot的样式配置,只需在调用时添加该参数即可设置箱线粗细:

g = sns.catplot(data=dataframe,
                x="var1",
                y="var2",
                hue="cat1",
                kind="box",
                height=3.5,
                aspect=1,
                showfliers=False,
                whis=(2, 98),
                width=0.5,
                legend=False,
                boxprops={'linewidth': 2}  # 此处设置线宽,数值按需调整
                )

二、调整hue分组的箱体间距

catplot没有直接的gap参数,需手动获取底层绘图元素调整位置,步骤如下:

  1. 获取绘图的轴对象
  2. 遍历所有箱体元素,计算偏移量调整x坐标
  3. 同步调整箱体对应的须、中位数线等元素的位置

完整代码示例:

g = sns.catplot(data=dataframe,
                x="var1",
                y="var2",
                hue="cat1",
                kind="box",
                height=3.5,
                aspect=1,
                showfliers=False,
                whis=(2, 98),
                width=0.5,
                legend=False,
                boxprops={'linewidth': 2}
                )

# 修正图例调用的变量名(原代码g_eff应为g)
ax = g.fig.get_axes()[0]
ax.legend(loc='lower left')

# 计算分组数量与单个箱体宽度
group_count = len(dataframe['cat1'].unique())
box_width = 0.5 / group_count
gap_factor = 0.2  # 间距系数,数值越大间距越宽

# 遍历调整每个箱体及对应线条的位置
for idx, box in enumerate(ax.artists):
    current_x = box.get_x()
    # 根据分组索引计算偏移量,让同x类别下的箱体均匀分散
    group_idx = idx % group_count
    offset = (group_idx - (group_count - 1)/2) * (box_width * gap_factor)
    box.set_x(current_x + offset)
    # 同步调整须、中位数线等元素
    for line in ax.lines[4*idx : 4*(idx+1)]:
        line.set_xdata(line.get_xdata() + offset)

说明

  • 线宽调整通过boxprops直接传递参数,无需额外操作。
  • 间距调整的核心是通过偏移量重新定位箱体及关联线条,gap_factor可根据需求自行调整。
  • 原代码中g_eff是笔误,需改为g才能正常调用图例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:16:21