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

如何基于DataFrame遍历列表制作带均值线的分组箱线图?

实现带平均值线的分组箱线图

完全不用手动遍历boxplots列表~用seaborn就能轻松搞定这个需求,而且代码简洁易读。下面是具体的实现思路和完整代码:

步骤1:整理数据为长格式

seaborn的绘图函数更适合处理长格式数据,所以我们先用pd.melt()把需要的列(A、D)和label列转成适合绘图的结构:

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

# 你的原始数据
df = pd.DataFrame(np.random.randint(0,30,size=(100, 4)), columns=list('ABCD'))
label = ['A','B','C','D','E','F']
df['label'] = np.random.choice(label, df.shape[0])
boxplots = ['A', 'D']

# 转成长格式:只保留需要的列
melted_df = pd.melt(df, id_vars='label', value_vars=boxplots, var_name='variable', value_name='value')

步骤2:绘制分组箱线图 + 平均值线

用seaborn.boxplot()画出分组箱线图,再叠加seaborn.pointplot()来绘制每组的平均值连线(pointplot默认计算均值,刚好符合需求):

plt.figure(figsize=(10,6))

# 绘制分组箱线图
sns.boxplot(x='label', y='value', hue='variable', data=melted_df, palette='Set2')

# 绘制平均值线:用黑色虚线+标记点区分
sns.pointplot(x='label', y='value', hue='variable', data=melted_df, 
              estimator=np.mean, marker='o', linestyle='--', color='black',
              dodge=0.3,  # 和箱线图错开位置,避免重叠
              ci=None)  # 关闭置信区间,只显示均值

# 调整图例和标题
plt.title('分组箱线图(带平均值线)', fontsize=14)
plt.legend(title='指标')
plt.show()

关键说明

  • 不用遍历boxplots:通过转长格式,seaborn会自动根据variable列(也就是A和D)分组绘制箱线图
  • 平均值线的dodge=0.3是为了让均值点和对应的箱线图对齐,避免重叠
  • 如果不想用pointplot,也可以手动计算每个组的均值,然后用plt.plot()添加水平线,但pointplot更高效

这样就能得到每个label分组下,A和D两个指标的箱线图,同时每条虚线展示对应组的平均值啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:12:42