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

基于DataFrames共享列绘制多序列子图的技术问题

解决DataFrame共有列子图绘制问题

问题背景

我有两个行索引完全相同的DataFrame,二者列名部分仅存在于单个DataFrame、部分为两者共有。需要针对共有列绘制数据并排列成2行2列的子图布局(每个子图对应一对共有列的A、B数据)。但当前代码只要存在独有的列,所有图形都无法显示,代码如下:

for column_name in [DataFrameA.columns, DataFrameB.columns]:        
    DataFrameA[column_name].plot(label = "A")        
    DataFrameB[column_name].plot(label = "B")        
    plt.show()

问题分析

你的代码存在两个核心问题:

  • 循环遍历对象错误:你遍历的是[DataFrameA.columns, DataFrameB.columns],每次迭代拿到的是整个列名数组而非单个列名,直接用数组索引DataFrame会触发错误
  • 未过滤共有列:没有筛选出同时存在于两个DataFrame的列,遍历所有列时遇到独有列会抛出KeyError,中断绘图流程

解决代码

import matplotlib.pyplot as plt

# 1. 筛选两个DataFrame的共有列
common_columns = [col for col in DataFrameA.columns if col in DataFrameB.columns]
# 取前4个共有列匹配2行2列布局,若共有列数量不足可按需调整逻辑
target_cols = common_columns[:4]

# 2. 创建2行2列的子图布局
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 8))
# 展平子图数组,方便和列名一一对应遍历
axes = axes.flatten()

# 3. 遍历目标列与对应子图,绘制数据
for col, ax in zip(target_cols, axes):
    DataFrameA[col].plot(ax=ax, label="A")
    DataFrameB[col].plot(ax=ax, label="B")
    ax.set_title(f"{col} (A vs B)")
    ax.legend()

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

关键说明

  • 先通过列表推导式精准筛选共有列,确保只处理同时存在于两个DataFrame的列,避免索引错误
  • 使用plt.subplots一次性创建所有子图,通过ax=ax参数指定绘图对应的子图位置
  • 展平子图数组是为了简化遍历逻辑,避免嵌套循环处理行、列索引
  • 若共有列数量少于4个,可添加判断逻辑隐藏空图或调整子图布局,按需修改即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:35:13