Xarray写入NetCDF分组时纬度翻转的问题咨询
问题原因与解决办法
核心原因
当使用group参数写入NetCDF时,xarray默认不会将全局坐标的识别元数据同步到组内坐标中。你的纬度坐标是从66°N到20°N降序排列,不带group时,xarray会自动为latitude坐标添加axis='Y'或standard_name='latitude'这类元数据,ncview依赖这些属性正确识别纬度方向;但带group写入时,这些元数据丢失,ncview默认按坐标存储顺序显示,就会出现纬度颠倒的视觉效果。
解决方法
方法1:为纬度坐标显式添加识别属性
写入前给latitude坐标补充标准属性,确保ncview能正确识别:
# 给latitude坐标添加元数据 output.latitude.attrs.update({ 'standard_name': 'latitude', 'axis': 'Y', 'units': 'degrees_north' }) # 带group参数写入 output.to_netcdf('test_file.nc', group=var, encoding=tot_encode, mode='w')
方法2:在encoding中指定坐标属性
如果tot_encode字典未包含坐标编码设置,可补充进去:
# 补充latitude的编码属性 tot_encode['latitude'] = { 'standard_name': 'latitude', 'axis': 'Y', 'units': 'degrees_north' } # 执行写入 output.to_netcdf('test_file.nc', group=var, encoding=tot_encode, mode='w')
方法3:调整纬度坐标为升序(可选)
若业务逻辑允许,可将纬度坐标调整为从南到北升序排列,无需依赖元数据也能正常显示:
# 反转纬度坐标及对应数据的顺序 output = output.sortby('latitude') # 带group参数写入 output.to_netcdf('test_file.nc', group=var, encoding=tot_encode, mode='w')
内容的提问来源于stack exchange,提问作者Ben Howey
相关产品推荐
相关产品推荐

