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

如何用Seaborn批量绘制威斯康星乳腺癌数据集变量箱线图网格

批量绘制威斯康星乳腺癌数据集变量的箱线图网格

嘿,我懂你不想逐个变量写重复代码的麻烦!用matplotlib搭配seaborn,几行代码就能搞定所有数值变量的箱线图网格布局,下面是具体的实现步骤和代码:

实现思路

首先我们要把数据集中的数值变量筛选出来(排除id和diagnosis这两个非数值/分类列),然后创建一个自适应的子图网格,循环遍历每个变量在对应子图上绘制箱线图,最后调整布局让图形更美观。

完整代码示例

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 加载数据集(请替换为你的本地CSV文件路径)
dsWisconsin = pd.read_csv("breast-cancer-wisconsin-data.csv")

# 筛选需要绘制的数值变量:移除id和diagnosis列
numeric_features = dsWisconsin.columns.drop(['id', 'diagnosis'])

# 设置网格布局参数:比如每行展示4个图,自动计算所需行数
cols_per_row = 4
total_rows = (len(numeric_features) + cols_per_row - 1) // cols_per_row  # 向上取整计算行数

# 创建画布,设置合适的尺寸保证图形清晰
plt.figure(figsize=(16, total_rows * 4))

# 循环遍历每个变量,绘制箱线图
for index, feature in enumerate(numeric_features):
    # 定位到当前子图
    ax = plt.subplot(total_rows, cols_per_row, index + 1)
    # 绘制箱线图,x轴为diagnosis,y轴为当前变量
    sns.boxplot(x='diagnosis', y=feature, data=dsWisconsin, ax=ax)
    # 设置子图标题和轴标签
    ax.set_title(f'{feature} by Diagnosis')
    ax.set_xlabel('Diagnosis')
    ax.set_ylabel(feature)

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
plt.show()

代码细节说明

  • 筛选变量:通过columns.drop()精准排除不需要的列,确保我们只处理需要可视化的数值特征。
  • 自适应网格:用(len(numeric_features) + cols_per_row -1) // cols_per_row自动计算行数,不管数据集里有多少个数值变量,都能适配出合适的网格布局。
  • 循环绘制:借助enumerate获取变量的索引,对应到子图的位置,每个子图独立绘制箱线图,保证逻辑清晰。
  • 布局优化:tight_layout()会自动调整子图间的间距,避免标题、轴标签互相遮挡,让整个网格看起来整洁有序。

如果想调整每行展示的图数量,只需要修改cols_per_row的值即可(比如改成3或5),行数会自动适配调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:19