使用CDO处理CHELSA日最高温计算年高温日数出现非整数、超365问题
问题原因
- 统计结果非整数:CDO的
gec算子默认输出为浮点型数据,满足条件的格点赋值为1,不满足为0,但存储类型是浮点,所以查看时会显示为浮点格式,属于存储层面的正常现象,可通过转整型算子修正。 - 年累计值超过366天:有两类高频触发原因:
- 阈值设置错误:CHELSA多数版本的日最高温数据采用摄氏度×100的整型压缩存储,单位不是开尔文,若误将压缩后的数值当成开尔文判断,会导致几乎所有格点都被判定为高温日,直接造成累计值远超366天。你可以用
ncdump -h chelsa_daily_2001_01.nc查看tmax变量的units、scale_factor、add_offset属性确认正确阈值。 - 合并年度数据时时间维度存在重复/冗余步长:原始月度NC文件可能存在重叠的时间记录,比如上月末几天和下月初几天重复,也可能是合并后时间戳排序混乱,你可以先执行
cdo ntime chelsa_annual_2001.nc查看合并后的年度文件总时间步,再用cdo showtimestamp chelsa_annual_2001.nc输出所有时间戳排查重复项。
- 阈值设置错误:CHELSA多数版本的日最高温数据采用摄氏度×100的整型压缩存储,单位不是开尔文,若误将压缩后的数值当成开尔文判断,会导致几乎所有格点都被判定为高温日,直接造成累计值远超366天。你可以用
修复方案
- 合并数据时增加去重、校准时间步骤:
# 合并+排序时间戳+删除重复时间步+校准时间轴 cdo -O mergetime chelsa_daily_2001*.nc tmp_merged.nc cdo -O sorttimestamp tmp_merged.nc tmp_sorted.nc cdo -O deldup tmp_sorted.nc tmp_dedup.nc cdo -O settaxis,2001-01-01,12:00:00,1day tmp_dedup.nc chelsa_annual_2001.nc
- 确认单位后调整阈值,高温日识别时同步转换数据类型为整型:
# 若确认单位为开尔文,阈值用308.15;若为摄氏度×100,阈值替换为3500 cdo -O int -gec,308.15 chelsa_annual_2001.nc chelsa_hotdays_2001.nc
- 年度求和时同步限制输出整型:
cdo -O int -yearsum chelsa_hotdays_2001.nc chelsa_hotdays_yearsum_2001.nc
ncview报错说明
你遇到的Can't open display报错是因为macOS默认没有安装X11运行环境,安装XQuartz后重启终端即可正常打开ncview。could not open .ncviewrc是首次运行的正常提示,不影响软件使用。
内容的提问来源于stack exchange,提问作者user97103
相关产品推荐
相关产品推荐

