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

使用pcolor绘制含np.nan数组时出现Matplotlib弃用警告求助

解决Matplotlib pcolor的nan数组警告问题

问题原因

你触发的警告是因为给pcolor传递的X和Y数组被手动设置了np.nan,导致Matplotlib内部处理网格时采用了旧版的压缩数组逻辑,而新版本即将调整这一行为,因此抛出 deprecation 警告。

解决方案

最规范的做法是仅在数据数组Z中设置np.nan,保留X和Y网格坐标的完整性——因为pcolor/pcolormesh只需要通过坐标网格确定绘图范围,不需要给坐标本身设nan。同时推荐用pcolormesh替代pcolor(渲染效率更高,功能一致)。

修正后的代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)

X, Y = np.meshgrid(x, y)
Z = np.exp(-(X**2 + Y**2))
# 只在数据数组Z中标记无效区域
Z[X**2 + Y**2 > 4] = np.nan

# 传递一维坐标或二维网格都可以,这里用一维更简洁
plt.pcolormesh(x, y, Z, cmap='viridis')

plt.colorbar()
plt.show()

如果一定要保留修改X/Y的方式(不推荐),可以显式给网格对象设置完整的二维数组来消除警告:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2,2,100)
y = np.linspace(-2,2,100)

X, Y = np.meshgrid(x,y)
X[X**2+Y**2>4] = np.nan
Y[X**2+Y**2>4] = np.nan
Z = np.exp(-(X**2+Y**2))

# 获取PolyQuadMesh对象并显式设置2D数组
mesh = plt.pcolor(Y,X,Z, cmap='viridis')
mesh.set_array(Z)

plt.colorbar()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:12:41