如何在同一图中为每个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
相关产品推荐
相关产品推荐

