2011-10-15 107 views
18

我有3个1-d ndarrays:X,Y,Zpcolormesh缺失值?

和以下代码:

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出来。我试图转换为蒙面数组,但无济于事 - 情节仍然是空白的。你能告诉我我做错了什么吗?谢谢。

回答

24

明白了。这似乎迂回的,但这是溶液:

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)) 
14

所选择的答案稍有好转

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

masked_invalid屏蔽所有NaN值,从而节省了n个EED指定

mask = np.isnan(Z)