2011-10-15 14 views
18

I 3 1-D ndarrays sahippcolormesh? x, y, z</p> <p>ve aşağıdaki kodu:

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

My arsa üzerinden boş gelir, ve bunun yöntemi nedeniyle = çizgisel 'interpolasyon şüpheli Nans ile çıkıyor. Ben maskeli bir diziye dönüştürmeyi denedim, ama boşuna - arsa hala boş. Bana ne yaptığımı söyleyebilir misin? Teşekkürler.

cevap

24

Anladım. Bu işlem, alternatif, ma.masked_where ile oluşturulmuş olması gerekir ya da pcolormesh için maskeli bir dizi olmak zorundadır,

import numpy.ma as ma 

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

Z matrisi nan 's içeriyorsa: Bu tur hakkında görünmektedir, ancak bu çözüm olduğu

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

seçilen Yanıta hafif bir iyileşme

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

masked_invalid maskeleri tüm NaN değerleri, böylece n tasarrufu eed diziler artık otomatik içten maskelenmiş olarak açık maskeleme artık matplotlib usta gerekli olduğunu

mask = np.isnan(Z) 
İlgili konular