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

如何实现Python气象图代码按日循环并自动保存生成的图像?

批量生成每日气象图(Meteogram)解决方案

需求背景

现有Python代码仅能生成1987年1月1日的气象图,需改造为循环批量处理1987-01-01至2021-12-31的每一天,自动生成并保存对应日期的气象图。

优化后的完整代码

import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 读取数据并统一日期格式
IAH = pd.read_excel('IAH.xlsx')
IAH['valid'] = pd.to_datetime(IAH['valid'])  # 确保日期列可被正确筛选

# 定义批量处理的时间范围
start_date = dt.datetime(1987, 1, 1)
end_date = dt.datetime(2021, 12, 31)
delta = dt.timedelta(days=1)

current_date = start_date
while current_date <= end_date:
    # 设定当日的时间边界
    day_start = current_date.replace(hour=0, minute=0, second=0)
    day_end = current_date.replace(hour=23, minute=59, second=59)
    
    # 筛选当日的气象数据(避免全量绘图后裁剪,提升效率)
    daily_data = IAH[(IAH['valid'] >= day_start) & (IAH['valid'] <= day_end)]
    
    # 跳过无数据的日期
    if daily_data.empty:
        current_date += delta
        continue
    
    # 提取当日各气象要素
    x = daily_data['valid']
    y1 = daily_data['tmpf']
    y2 = daily_data['dwpf']
    y3 = daily_data['drct']
    y4 = daily_data['mslp']
    
    # 创建绘图画布
    fig, ax = plt.subplots(3, figsize=(10, 8))
    
    # 绘制温度与露点曲线
    ax[0].plot(x, y1, color='blue', label='Temp')
    ax[0].plot(x, y2, color='green', label='Dew Point')
    ax[0].set_xbound(day_start, day_end)
    ax[0].set_ybound(0, 100)
    ax[0].set_ylabel('TMP & DP')
    ax[0].xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
    ax[0].legend()
    
    # 绘制风向数据
    ax[1].plot(x, y3, color='black', marker='o')
    ax[1].set_xbound(day_start, day_end)
    ax[1].set_ybound(0, 360)
    ax[1].set_ylabel('WDIR')
    ax[1].xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
    
    # 绘制海平面气压曲线
    ax[2].plot(x, y4, color='red')
    ax[2].set_xbound(day_start, day_end)
    ax[2].set_ybound(1000, 1040)
    ax[2].set_ylabel('MSLP')
    ax[2].xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
    
    # 调整子图间距避免重叠
    fig.tight_layout()
    
    # 按日期命名并保存图片
    filename = f"{current_date.strftime('%Y%m%d')}_meteogram.png"
    plt.savefig(filename, dpi=100)
    
    # 关闭画布释放内存
    plt.close(fig)
    
    # 日期步进一天
    current_date += delta

核心改进说明

  • 日期格式标准化:先将valid列转为datetime类型,确保日期筛选逻辑准确。
  • 高效数据筛选:直接提取当日数据绘图,替代原代码全量绘图后裁剪边界的低效方式。
  • 异常处理:跳过无数据的日期,避免生成空图。
  • 批量保存:用日期字符串命名图片,方便后续查找。
  • 内存优化:每次绘图后关闭画布,防止内存占用过高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:45:32