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

如何在同一图中为每个Category分组展示T1与T2的箱线图?

实现同一Category下T1和T2箱线图的并列展示

你遇到的重叠问题是因为直接在同一轴上叠加绘制两组箱线图,未做分组区分。正确做法是先将宽格式数据转换为长格式,再利用Seaborn的hue参数实现并列展示。

具体步骤:

  • 使用pd.melt()重塑DataFrame:将原数据中的T1和T2列合并为一列,同时新增一列标记数据属于T1还是T2。
  • 调用Seaborn箱线图时,通过hue参数指定分组依据,即可让同一Category下的T1、T2箱线图并列显示。

完整代码示例:

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

# 构造示例数据
data = {
    'Category':  ['eins','zwei','drei', 'vier', 'fünf', 'sechs', 'sieben', 'acht', 'neun', 
                  'eins','zwei','drei', 'vier', 'fünf', 'sechs', 'sieben', 'acht', 'neun'],
    'T1': ['1', '6', '5','8', '4', '7', '5', '7', '1', '7', '3', '2', '1', '4', '7', '5', '7', '1'],
    'T2':['3', '7', '7','9', '8', '10', '8', '9', '3', '10', '9', '5', '3', '8', '9', '6', '7', '5']
}

df = pd.DataFrame(data)
df[['T1', 'T2']] = df[['T1', 'T2']].astype(int)

# 转换为长格式数据
df_melted = pd.melt(
    df, 
    id_vars='Category', 
    value_vars=['T1', 'T2'], 
    var_name='Measurement',  # 标记数据属于T1还是T2
    value_name='Value'       # 存储对应数值
)

# 绘制并列箱线图
sns.boxplot(
    x='Category', 
    y='Value', 
    hue='Measurement',  # 按Measurement字段分组
    data=df_melted,
    palette=['#e41a1c', '#377eb8']  # 自定义颜色区分两组数据
)
plt.title('T1 vs T2 by Category')
plt.show()

代码说明:

  • pd.melt():将原宽表转换为长表,让每个Category对应两行数据(分别对应T1和T2的数值),为Seaborn提供明确的分组逻辑。
  • hue='Measurement':指定按Measurement列(即T1/T2)进行分组,同一Category下的不同分组会生成并列的箱线图,彻底避免重叠问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:45:27