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

无需pandas.melt()/stack(),用单个Seaborn函数绘制分组箱线图

无需转换宽表,直接用Seaborn生成分组箱线图

Seaborn的boxplot函数确实支持直接基于宽表生成分组箱线图,不需要先通过pandas.melt()或stack()转换数据格式,以下是两种可行的实现方式:

方式1:利用data参数指定数据源,直接传入目标列名列表

这是最简洁的写法,直接告诉Seaborn要绘制的列,它会自动完成分组逻辑:

import random
import pandas
import seaborn
import matplotlib.pyplot as plt

random.seed(0)
k = 10
df = pandas.DataFrame(
    {
        'ID': range(k),
        'catA': random.choices(range(200), k=k),
        'catB': random.choices(range(200), k=k)
    }
)

# 绘制y轴为分类(列名)、x轴为数值的箱线图,和你melt后的效果一致
seaborn.boxplot(data=df, x=['catA', 'catB'])
plt.show()
# 如果想把数值放在x轴、分类放在y轴,调整参数即可
seaborn.boxplot(data=df, y=['catA', 'catB'])
plt.show()

方式2:直接拼接数据列,指定分类标签

如果你需要更灵活的控制,可以手动拼接数值列并对应分类标签,不需要依赖宽表的列名映射:

import numpy as np

# 拼接两列的数值数据
values = np.concatenate([df['catA'], df['catB']])
# 生成对应的分类标签,每个列名重复对应行数
labels = np.tile(['catA', 'catB'], len(df))

# 绘制箱线图
seaborn.boxplot(x=values, y=labels)
plt.show()

这两种方式都完全不需要转换数据格式,直接基于原始宽表即可生成你需要的分组箱线图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:27:18