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

如何在xarray中绘制离散区间色阶图并解决Norm与vmin/vmax冲突错误

解决xarray绘制离散色阶时的ValueError问题

错误原因分析

你遇到的ValueError由两个问题导致:

  1. 重复设置区间规则:BoundaryNorm已经通过bounds参数定义了完整的数值分割区间(0-1、1-5、5-100),手动设置norm.vmax和norm.vmin属于重复定义,会和xarray绘图函数的参数逻辑冲突。
  2. 变量名拼写错误:代码里把定义好的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:43:06