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

如何在单个Matplotlib图中绘制两个箱线图?新手寻求简便方法

在单个图中绘制两个箱线图的简便方法

方法一:Matplotlib原生实现

直接将两个数据集传入plt.boxplot(),通过positions参数指定每个箱线图的位置避免重叠,再自定义样式:

import matplotlib.pyplot as plt

# 打包两个数据集
data = [dff['totlngth'], dfm['totlngth']]
# 绘制箱线图,指定位置与基础样式
bplot = plt.boxplot(data, vert=True, patch_artist=True, positions=[1, 2])

# 分别设置两个箱线图的填充色
bplot['boxes'][0].set(facecolor='pink')
bplot['boxes'][1].set(facecolor='Lightblue')
# 统一设置中位数颜色
for median in bplot['medians']:
    median.set_color('black')

# 设置x轴刻度标签,区分两个数据集
plt.xticks([1, 2], ['Female', 'Male'])  # 可根据实际数据修改标签
plt.yticks([75, 80, 85, 90, 95])
plt.ylabel('totlngth')
plt.show()

核心说明:

  • 把两个数据集合并成列表传入boxplot,positions参数指定x轴位置,解决重叠问题
  • 通过索引直接访问每个箱线元素,自定义颜色样式
  • 添加x轴标签让图表逻辑更清晰

方法二:Seaborn(更简洁,适合新手)

Seaborn支持直接处理分组数据,无需手动调整位置,代码更简洁:

先将两个数据集合并为带分组标识的DataFrame:

import seaborn as sns
import pandas as pd

# 合并数据并添加分组列
df_combined = pd.concat([
    dff['totlngth'].to_frame().assign(group='Female'),
    dfm['totlngth'].to_frame().assign(group='Male')
])

# 一键绘制箱线图并设置样式
sns.boxplot(x='group', y='totlngth', data=df_combined,
            palette=['pink', 'Lightblue'], medianprops={'color': 'black'})
plt.yticks([75, 80, 85, 90, 95])
plt.show()

核心说明:

  • 新增分组列用来区分两个数据集,符合Seaborn的分组绘图逻辑
  • 通过palette直接指定填充色,medianprops统一设置中位数样式,无需循环处理

内容的提问来源于stack exchange,提问作者Leandro Guimarães

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:27:47