pcolormesh缺少值?

时间:2011-10-15 14:14:32

标签: numpy matplotlib scipy

我有3个1-D ndarrays:x,y,z

和以下代码:

import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as spinterp

## define data
npoints = 50
xreg = np.linspace(x.min(),x.max(),npoints)
yreg = np.linspace(y.min(),y.max(),npoints)
X,Y = np.meshgrid(xreg,yreg)
Z = spinterp.griddata(np.vstack((x,y)).T,z,(X,Y),
                      method='linear').reshape(X.shape)

## plot
plt.close()
ax = plt.axes()
col = ax.pcolormesh(X,Y,Z.T)
plt.draw()

我的情节是空白的,我怀疑这是因为方法='线性'插值出现了nans。我试过转换为蒙面数组,但无济于事 - 情节仍然是空白的。你能告诉我我做错了什么吗?感谢。

3 个答案:

答案 0 :(得分:25)

知道了。这似乎是圆形的,但这是解决方案:

import numpy.ma as ma

Zm = ma.masked_where(np.isnan(Z),Z)
plt.pcolormesh(X,Y,Zm.T)

如果Z矩阵包含nan,则必须是pcolormesh的蒙版数组,必须使用ma.masked_where创建,或者

Zm = ma.array(Z,mask=np.isnan(Z))

答案 1 :(得分:15)

所选答案略有改善

import numpy.ma as ma
Zm = ma.masked_invalid(Z)
plt.pcolormesh(X, Y, Zm.T)

masked_invalid会屏蔽所有NaN值,从而无需指定

mask = np.isnan(Z)

答案 2 :(得分:6)

请注意,matplotlib master中不再需要显式屏蔽,因为数组现在会在内部自动屏蔽。将并入matplotlib> 2.1。查看我的合并拉取请求https://github.com/matplotlib/matplotlib/pull/5451

所以现在它就像

一样简单
for (int iteration = 0; iteration < initialDistanceMatrix.length; iteration++)