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

使用pvlib绘制晴空模型与实测GHI对比图遇阻求助

问题排查与修正方案:PVLIB晴空模型与实测GHI对比绘图问题

一、核心问题梳理

  • 实测GHI无法显示、当日>1000W/m²的极值被截断
  • 调整数据格式后Ineichen/Solis晴空模型输出全为0.0
  • 绘图时频繁报错、图形不符合预期

二、分步排查与解决

1. 实测数据预处理修正

时间与时区校验

pvlib要求时间序列带时区信息,且需与站点时区匹配(巴西利亚为America/Sao_Paulo,UTC-3),代码示例:

import pandas as pd
# 读取数据时直接解析为带时区的时间索引
df = pd.read_csv('your_data.csv', index_col=0, parse_dates=True)
df = df.tz_localize('America/Sao_Paulo', ambiguous='infer', nonexistent='shift_forward')

极值显示修正

检查绘图代码是否设置了y轴上限(如plt.ylim(0,1000)),若有则删除该限制,确保极值正常显示;同时确认数据中df['GHI'] > 1000的行未被误过滤。

2. 晴空模型输入参数校验

模型输出全为0.0的核心原因是输入参数错误:

  • 确认站点参数正确:巴西利亚纬度-15.7801、经度-47.9292、海拔1172m
  • 强制转换时间序列为UTC时区:pvlib晴空模型仅接受UTC时间输入,转换代码:
    df_utc = df.tz_convert('UTC')
    
  • 检查Linke浊度值:Ineichen模型默认用McClear算法估算,若手动输入需确保数值在1-10区间内。

3. 标准模型调用与绘图代码

以下是可直接参考的完整代码,避免索引对齐、时区混合等问题:

import pvlib
from pvlib.location import Location
import matplotlib.pyplot as plt

# 初始化巴西利亚站点
site = Location(latitude=-15.7801, longitude=-47.9292, altitude=1172, tz='America/Sao_Paulo')

# 读取并预处理实测数据
df = pd.read_csv('brasilia_ghi_data.csv', index_col=0, parse_dates=True)
df = df.tz_localize('America/Sao_Paulo', ambiguous='infer')
df_utc = df.tz_convert('UTC')

# 计算两种晴空模型的GHI
ineichen_clear = site.get_clearsky(df_utc.index, model='ineichen')
solis_clear = site.get_clearsky(df_utc.index, model='solis')

# 转换回本地时区,确保与实测数据索引对齐
ineichen_clear = ineichen_clear.tz_convert('America/Sao_Paulo')
solis_clear = solis_clear.tz_convert('America/Sao_Paulo')

# 绘制对比图
plt.figure(figsize=(12,6))
plt.plot(df.index, df['GHI'], label='实测GHI', alpha=0.7)
plt.plot(ineichen_clear.index, ineichen_clear['ghi'], label='Ineichen晴空GHI', linestyle='--')
plt.plot(solis_clear.index, solis_clear['ghi'], label='Solis晴空GHI', linestyle=':')
plt.ylabel('GHI (W/m²)')
plt.xlabel('时间')
plt.legend()
plt.title('巴西利亚实测GHI与晴空模型对比')
plt.show()

4. 常见报错排查

  • 时区混合报错:确保所有时间序列均为带时区的aware datetime,禁止naive datetime参与运算
  • 数据对齐问题:若实测与模型时间索引不匹配,用df = df.reindex(ineichen_clear.index, method='nearest')强制对齐

三、额外调试建议

  • 打印模型输入输出的前5行,检查是否存在NaN或异常0值
  • 取一个正午时间点,手动计算太阳高度角,对比模型输出是否符合物理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:52:39