使用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
相关产品推荐
相关产品推荐

