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

如何遍历DataFrame列将散点图按网格排列为子图?

如何将逐列生成的散点图调整为网格布局

你原有代码会为DataFrame的每一列单独弹出一个独立散点图窗口,原代码如下:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('test_data.csv')

y = df['a']

col=['a','b','c','d','e','f','g']

for i in col[1:]:
    plt.figure()
    plt.scatter(df[i], y)
    plt.show()

调整方案

不要在循环内每次新建画布,提前通过plt.subplots()定义好网格布局的子图数组,循环时依次在对应子图上绘图即可。
以你需要绘制的6个散点图(对应col[1:]的b到g共6列)为例,采用2行3列网格排布的调整后代码如下:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('test_data.csv')
y = df['a']
col = ['a','b','c','d','e','f','g']
plot_columns = col[1:]

# 定义网格行列数,2行3列刚好容纳6张子图
n_row = 2
n_col = 3

# 初始化画布和子图网格,设置合适的整体画布大小
fig, axes = plt.subplots(nrows=n_row, ncols=n_col, figsize=(12, 7))
# 将二维的子图轴数组展平为一维,方便循环按顺序索引
axes = axes.flatten()

for idx, col_name in enumerate(plot_columns):
    current_ax = axes[idx]
    current_ax.scatter(df[col_name], y)
    # 给每个子图加上轴标签,方便识别对应列
    current_ax.set_xlabel(col_name)
    current_ax.set_ylabel('a')

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

自定义调整说明

  • 如果需要更换网格比例,比如改成3行2列,只需要修改n_row和n_col的数值即可,保证两个数值的乘积大于等于待绘制的子图总数量
  • 如果网格存在多余的空白子图,可以拿到对应子图的轴对象后调用.axis('off')隐藏
  • 可以通过修改figsize参数调整整体画布的宽高,适配不同的展示需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.09 16:15:43