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

Python绘制降序并列箱线图遇报错,请求代码协助

解决Seaborn并列箱线图绘制及排序问题

核心问题分析

你之前的代码存在两个关键问题:

  • 合并数据时未添加组别标识列,Seaborn无法区分两组数据;
  • 调用boxplot时参数使用错误,要么未指定数据映射关系,要么传入数据格式不符合要求。

修正步骤及代码

1. 正确合并数据并添加组别标签

先给两个分组DataFrame添加组别列,再合并(注意append已被Pandas弃用,推荐用concat):

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

# 给未控制组、控制组添加组别标识
df1['group'] = 'uncontrolled'
df2['group'] = 'controlled'

# 合并为长格式DataFrame
df = pd.concat([df1, df2], ignore_index=True)

2. 确定降序排列的组别顺序

如果需要按组内中位数降序排列箱线图,先计算每组中位数并排序:

# 替换'value_col'为你实际的数值列名称
group_order = df.groupby('group')['value_col'].median().sort_values(ascending=False).index.tolist()

如果只是需要固定降序(比如uncontrolled在前),直接指定列表:

group_order = ['uncontrolled', 'controlled']

3. 绘制降序并列箱线图

调用boxplot时明确指定x(组别)、y(数值)、数据源及排序顺序:

sns.boxplot(x='group', y='value_col', data=df, order=group_order)
plt.show()

错误原因说明

  • 第一段代码:sns.boxplot(df)未指定x/y参数,Seaborn无法正确映射数据维度,且合并后无组别标识,无法生成并列箱线图;
  • 第二段代码:data=[df1,df2]的传入方式不符合Seaborn要求,它需要长格式数据而非DataFrame列表,同时代码误将含字符串的组别列当作数值处理,导致类型转换报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:57:15