如何在xarray中绘制离散区间色阶图并解决Norm与vmin/vmax冲突错误
解决xarray绘制离散色阶时的ValueError问题
错误原因分析
你遇到的ValueError由两个问题导致:
- 重复设置区间规则:
BoundaryNorm已经通过bounds参数定义了完整的数值分割区间(0-1、1-5、5-100),手动设置norm.vmax和norm.vmin属于重复定义,会和xarray绘图函数的参数逻辑冲突。 - 变量名拼写错误:代码里把定义好的
norm误写为norma,导致传递了未定义的变量。
修正后的代码
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np import xarray as xr # 假设ds_p是已加载的xarray数据集 fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(10, 7)) cmap = mpl.colors.ListedColormap(['blue', 'yellow', 'red']) bounds = np.array([0, 1, 5, 100]) # 用bounds直接初始化BoundaryNorm,无需额外设置vmin/vmax norm = mpl.colors.BoundaryNorm(bounds, cmap.N) # 修正变量名拼写,传递正确的norm参数 ds_p.plot( ax=ax, cmap=cmap, norm=norm, cbar_kwargs={'pad': 0.1, 'shrink': 0.5, 'label': '[% of year]'} ) plt.show()
关键说明
BoundaryNorm会自动根据你传入的bounds把数值映射到对应的颜色区间,你的bounds有4个点,刚好对应3种颜色(3个区间),匹配关系正确。- 移除手动设置
norm.vmax/norm.vmin的代码后,就不会触发“同时传递Normalize实例和vmin/vmax”的冲突。
内容的提问来源于stack exchange,提问作者MGL
相关产品推荐
相关产品推荐

