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

