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

如何用df.boxplot()创建子图展示原始与自定义ylim的缩放箱线图?

实现含原始与缩放版的箱线图子图布局

问题描述

我有如下代码:

df.boxplot(column = ['rate'], by = 'age', figsize=(9,7))

但该箱线图存在异常值,导致箱体显示过小。我需要创建2x1或1x2的子图,分别展示:1. 原始箱线图;2. 缩放后的箱线图(设置ylim(0,2)),请问该如何实现?

解决方案

核心思路是利用Matplotlib的subplots()创建子图布局,通过df.boxplot的ax参数指定箱线图绘制到对应子图坐标轴上,分别配置原始显示和y轴缩放效果。

1. 2x1 上下排列子图

import matplotlib.pyplot as plt

# 创建2行1列的子图,设置整体画布尺寸
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(9, 12))

# 绘制原始箱线图(第一个子图)
df.boxplot(column=['rate'], by='age', ax=ax1)
ax1.set_title('原始箱线图(含异常值)')
ax1.set_xlabel('年龄')
ax1.set_ylabel('rate')
# 移除by参数自动生成的顶部标题,避免重复
ax1.get_figure().suptitle('')

# 绘制缩放y轴后的箱线图(第二个子图)
df.boxplot(column=['rate'], by='age', ax=ax2)
ax2.set_ylim(0, 2)  # 设置y轴范围
ax2.set_title('缩放y轴后的箱线图(y范围0-2)')
ax2.set_xlabel('年龄')
ax2.set_ylabel('rate')
ax2.get_figure().suptitle('')

# 自动调整子图间距,防止元素重叠
plt.tight_layout()
plt.show()

2. 1x2 左右排列子图

import matplotlib.pyplot as plt

# 创建1行2列的子图,设置整体画布尺寸
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(14, 7))

# 绘制原始箱线图(第一个子图)
df.boxplot(column=['rate'], by='age', ax=ax1)
ax1.set_title('原始箱线图(含异常值)')
ax1.set_xlabel('年龄')
ax1.set_ylabel('rate')
ax1.get_figure().suptitle('')

# 绘制缩放y轴后的箱线图(第二个子图)
df.boxplot(column=['rate'], by='age', ax=ax2)
ax2.set_ylim(0, 2)  # 设置y轴范围
ax2.set_title('缩放y轴后的箱线图(y范围0-2)')
ax2.set_xlabel('年龄')
ax2.set_ylabel('rate')
ax2.get_figure().suptitle('')

plt.tight_layout()
plt.show()

关键说明

  • 通过ax参数绑定箱线图到指定子图,实现多图布局
  • 调用ax.get_figure().suptitle('')移除boxplot的by参数自动生成的顶部标题,避免和自定义标题冲突
  • plt.tight_layout()自动调整子图间的间距,确保标题、坐标轴标签不会重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:25:20