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

