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

如何绘制两个DataFrame所有列组合的动态适配子图网格

实现方案

通过双层循环遍历两个DataFrame的所有列组合,动态计算子图网格的行列数,无需硬编码固定行列值,即可适配任意列数的输入、预测数据集。

核心逻辑

  • 自动读取输入DataFrame列数作为子图网格行数,预测DataFrame列数作为子图网格列数
  • 画布尺寸根据子图总数量动态缩放,避免子图拥挤、标签重叠
  • 双层循环依次遍历所有输入列、预测列的两两组合,在对应子图位置绘制散点
  • 自动为每个子图匹配对应标题、坐标轴标签

实现代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 测试样例数据,实际使用时替换为你自己的输入、预测数据集即可
dummy_data = pd.DataFrame(np.random.uniform(low=65.5,high=140.5,size=(50,4)), columns=list('ABCD'))
dummy_predicted = pd.DataFrame(np.random.uniform(low=15.5,high=17.5,size=(50,4)), columns=list('WXYZ'))

# 动态获取数据集列数,自动计算子图网格规模
n_input_cols = len(dummy_data.columns)
n_pred_cols = len(dummy_predicted.columns)

# 按子图数量动态设置画布尺寸,预留足够显示空间
fig = plt.figure(figsize=(4*n_pred_cols, 3*n_input_cols))
plot_counter = 1

# 双层循环遍历所有输入列-预测列组合
for input_col in dummy_data.columns:
    for pred_col in dummy_predicted.columns:
        plt.subplot(n_input_cols, n_pred_cols, plot_counter)
        plt.scatter(dummy_data[input_col], dummy_predicted[pred_col], s=15)
        
        plt.title(f'{input_col} vs {pred_col}', fontsize=10)
        plt.xlabel(input_col, fontsize=9)
        plt.ylabel(pred_col, fontsize=9)
        
        plot_counter += 1

# 自动调整子图间距避免标签遮挡
plt.tight_layout()
plt.show()

适配说明

  • 代码不依赖固定列数:如果输入集为3列、预测集为2列,会自动生成3行2列的子图网格,无需修改其他逻辑
  • 可根据自身显示需求调整figsize的缩放系数、散点大小s、字体大小等参数
  • 如果需要减少重复轴标签的冗余显示,可以在创建子图时传入sharex=True、sharey=True参数统一坐标轴

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:57:20