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

如何编写循环为28个站点的四季PM2.5/PM10比值生成子图直方图

解决多站点多季节PM2.5/PM10比值直方图绘制问题

问题背景

现有7年28个站点的每日PM2.5/PM10比值数据,已拆分为4个结构、列名完全一致的季节DataFrame(春季、夏季、秋季、冬季)。需要生成28个独立Figure,每个Figure包含4个子图,分别对应该站点四个季节的比值分布直方图。之前的代码出现AttributeError等错误,以下是可行的实现方案。

完整实现代码

假设四个季节的DataFrame分别命名为df_spring、df_summer、df_autumn、df_winter,列名为站点标识(如Site_01至Site_28):

import pandas as pd
import matplotlib.pyplot as plt

# 定义季节数据与对应名称的配对列表
season_datasets = [
    (df_spring, '春季'),
    (df_summer, '夏季'),
    (df_autumn, '秋季'),
    (df_winter, '冬季')
]

# 获取所有站点列名(根据实际列名调整筛选逻辑,排除日期等非站点列)
site_list = [col for col in df_spring.columns if col.startswith('Site_')]

# 循环每个站点生成独立Figure
for site_id in site_list:
    # 创建2行2列的子图布局,设置画布尺寸
    fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 10))
    # 将二维轴数组展平为一维,方便循环遍历
    axes_flat = axes.flatten()

    # 为每个季节绘制子图
    for ax, (season_df, season_name) in zip(axes_flat, season_datasets):
        # 提取当前站点当前季节的有效数据(剔除空值)
        ratio_data = season_df[site_id].dropna()
        # 绘制直方图,可自定义bins数量、颜色等参数
        ax.hist(ratio_data, bins=30, edgecolor='black', alpha=0.7)
        # 设置子图标题与坐标轴标签
        ax.set_title(f'{season_name} 比值分布')
        ax.set_xlabel('PM2.5/PM10 比值')
        ax.set_ylabel('天数')
        # 添加网格线提升可读性
        ax.grid(axis='y', linestyle='--', alpha=0.6)

    # 调整子图间距,避免标题、标签重叠
    plt.tight_layout()
    # 设置整个Figure的主标题
    fig.suptitle(f'站点 {site_id} 各季节PM2.5/PM10比值分布', y=1.02, fontsize=14)
    # 保存图片(可自定义保存路径与格式)
    plt.savefig(f'{site_id}_seasonal_ratio_hist.png', dpi=300, bbox_inches='tight')
    # 显示图片(交互式环境下启用)
    plt.show()
    # 关闭画布释放内存,避免内存泄漏
    plt.close(fig)

常见错误排查(针对AttributeError)

  1. 列名不匹配:确保四个季节DataFrame的站点列名完全一致,比如避免出现Site01和Site_01的拼写差异。可通过print(df_spring.columns)对比其他季节DataFrame的列名验证。
  2. 无效列名调用:确认site_list中的列名确实存在于所有季节DataFrame中,避免因筛选逻辑错误导致调用不存在的列。
  3. 轴对象遍历错误:若直接遍历二维的axes数组(未用flatten()),会导致轴对象与季节数据无法正确配对,引发属性访问错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:51:20