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

如何为DataFrame所有列按分组自动批量生成箱线图

批量生成箱线图的实现方案

你可以通过遍历特征列+拍平子图索引的方式实现自动化绘制,无需手动编写每一行绘图代码,两种常用实现方案如下:

方案1:单画布全量绘制

适合特征数量不多、需要将所有箱线图放在同一张图的场景:

import matplotlib.pyplot as plt
import seaborn as sns
import math

# 提取所有待绘制的特征列,自动排除类别列classe
feature_cols = [col for col in sapiens.columns if col != 'classe']
row_plot_num = 3  # 自定义每行放置的子图数量
total_row = math.ceil(len(feature_cols) / row_plot_num)  # 自动计算所需总行数

# 生成画布和子图数组,根据总高度动态调整画布尺寸
fig, axes = plt.subplots(total_row, row_plot_num, figsize=(18, 4 * total_row))
axes = axes.flatten()  # 将二维子图数组转为一维,无需手动计算行列坐标

fig.suptitle('SAPIENS BOXPLOTS', y=1.02)

# 遍历特征自动绘制
for index, feature in enumerate(feature_cols):
    sns.boxplot(ax=axes[index], data=sapiens, x='classe', y=feature)
    axes[index].set_title(feature)  # 可选:为每个子图添加特征名标题

# 自动隐藏多余的空白子图
for empty_idx in range(len(feature_cols), len(axes)):
    axes[empty_idx].axis('off')

plt.tight_layout()  # 自动调整子图间距避免重叠
plt.show()

方案2:分页绘制(更适合150个特征的场景)

单画布放置150张子图会非常拥挤,推荐分页绘制,每页固定放9张(3x3),还可以自动保存到本地:

import matplotlib.pyplot as plt
import seaborn as sns

feature_cols = [col for col in sapiens.columns if col != 'classe']
per_page_num = 9  # 每页放置9张子图,对应3x3布局
total_page = (len(feature_cols) + per_page_num - 1) // per_page_num  # 计算总页数

for page in range(total_page):
    # 提取当前页对应的特征列表
    start = page * per_page_num
    end = min(start + per_page_num, len(feature_cols))
    current_features = feature_cols[start:end]
    
    # 生成当前页画布
    fig, axes = plt.subplots(3, 3, figsize=(18, 12))
    axes = axes.flatten()
    fig.suptitle(f'SAPIENS BOXPLOTS 第{page+1}页/共{total_page}页', y=1.02)
    
    # 绘制当前页所有箱线图
    for idx, feature in enumerate(current_features):
        sns.boxplot(ax=axes[idx], data=sapiens, x='classe', y=feature)
        axes[idx].set_title(feature)
    
    # 隐藏空白子图
    for empty_idx in range(len(current_features), len(axes)):
        axes[empty_idx].axis('off')
    
    plt.tight_layout()
    # 可选:自动保存每页图片到本地
    plt.savefig(f'sapiens_boxplot_page_{page+1}.png', dpi=300, bbox_inches='tight')
    plt.show()

核心逻辑说明

  • 先自动筛选排除类别列的所有待绘制特征,无需手动整理特征名
  • 通过axes.flatten()将二维的子图数组转为一维,直接按遍历顺序匹配子图位置,不需要手动计算[行,列]坐标
  • 自动隐藏未被使用的空白子图,避免出现多余坐标轴

效果示例:
BOXPLOTS_SAPIENS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 16:15:03