2011-10-15 3 views
18

I 3 1-Dのndarrays有する:X、Y、Z値のないpcolormesh?

、次のコード:

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

マイプロットはブランク出てくる、私は方法は= '線形' 補間ので、それは疑いをナンと出てくる。私はマスクされた配列に変換しようとしましたが、役に立つことはありません - プロットはまだ空白です。私が間違っていることを教えてくれますか?ありがとう。

答えて

24

、それは代わりに、ma.masked_whereで作成する必要があり、またはpcolormesh用マスクされた配列、である必要があり、

import numpy.ma as ma 

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

Z行列がnan年代が含まれている場合:これは、ラウンド程度と思われるが、これは解決しました

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個の保存ee to指定

mask = np.isnan(Z) 
6

配列が自動的に内部的に自動的にマスクされるため、明示的なマスキングはもはやmatplotlibマスターでは不要になることに注意してください。 matplotlib> 2.1に組み込まれます。だから今、それは

plt.pcolormesh(X,Y,Z.T) 

と同じくらい簡単です私のマージされたプル要求 https://github.com/matplotlib/matplotlib/pull/5451

を参照してください。

関連する問題