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

如何将Pandas分组箱线图作为子图合并并设置独立Y轴

将分组箱线图合并为同一画布的子图

我来帮你搞定这个问题!要把每个特征的分组箱线图整合到同一个画布的子图里,只需要结合matplotlib的子图功能和pandas的boxplot方法就能轻松实现,具体操作如下:

完整实现步骤

  1. 导入必要的库:除了你已经用到的pandas和random,还需要导入matplotlib.pyplot来管理画布和子图。
  2. 创建画布与子图:根据特征数量(这里是A、B、C三个特征),创建对应数量的子图布局。
  3. 循环绘制子图:遍历每个特征,在对应的子图上绘制分组箱线图,通过ax参数指定绘制的子图位置。
  4. 优化布局与样式:调整子图间距、标题等,避免元素重叠,提升图表可读性。

完整代码示例

import pandas as pd
import random
import matplotlib.pyplot as plt

# 构造数据(适配Python3:xrange已改为range)
df = pd.DataFrame(data={
    'A': random.sample(range(60, 100), 10),
    'B': random.sample(range(20, 40), 10),
    'C': random.sample(range(2000, 3010), 10),
    'type': list(3*'K') + list(3*'L') + list(4*'M')
})

# 创建画布和子图:1行3列,设置合适的画布大小
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 6))

# 遍历每个特征,在对应子图绘制箱线图
for i, el in enumerate(df.columns[:-1]):
    # 指定ax参数,将箱线图绑定到对应子图
    df.boxplot(column=el, by='type', ax=axes[i])
    # 自定义子图标题,替换默认标题
    axes[i].set_title(f'Boxplot of {el} by type')
    # 移除pandas自动添加的全局顶部标题
    axes[i].get_figure().suptitle('')

# 自动调整子图间距,避免标签重叠
plt.tight_layout()
# 显示最终图表
plt.show()

关键细节说明

  • subplots参数:nrows和ncols控制子图的行列数,这里因为有3个特征,设置为1行3列;figsize可根据需求调整画布宽高。
  • ax参数:这是实现多子图整合的核心,通过它指定当前箱线图要绘制到哪个子图上,确保所有图表都在同一个画布内。
  • 标题调整:pandas的boxplot默认会添加重复的全局标题,通过set_title()自定义子图标题,suptitle('')清空全局标题,让图表逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:22:42