如何在单个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
相关产品推荐
相关产品推荐

