hat*_*rix 18 numpy matplotlib scipy
我有3个1-D ndarray: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()
Run Code Online (Sandbox Code Playgroud)
我的情节是空白的,我怀疑是因为方法='线性'插值出现了nans.我试过转换为蒙面数组,但无济于事 - 情节仍然是空白的.你能告诉我我做错了什么吗?谢谢.
hat*_*rix 25
得到它了.这似乎是圆形的,但这是解决方案:
import numpy.ma as ma
Zm = ma.masked_where(np.isnan(Z),Z)
plt.pcolormesh(X,Y,Zm.T)
Run Code Online (Sandbox Code Playgroud)
如果Z矩阵包含nan's',它必须是一个掩码数组pcolormesh,必须用ma.masked_where,或者,
Zm = ma.array(Z,mask=np.isnan(Z))
Run Code Online (Sandbox Code Playgroud)
小智 15
所选答案略有改善
import numpy.ma as ma
Zm = ma.masked_invalid(Z)
plt.pcolormesh(X, Y, Zm.T)
Run Code Online (Sandbox Code Playgroud)
masked_invalid掩盖所有NaN值,从而节省了指定的需要
mask = np.isnan(Z)
Run Code Online (Sandbox Code Playgroud)
请注意,matplotlib master中不再需要显式屏蔽,因为数组现在在内部自动屏蔽.将被纳入matplotlib> 2.1.请参阅我的合并拉取请求https://github.com/matplotlib/matplotlib/pull/5451
所以现在就这么简单
plt.pcolormesh(X,Y,Z.T)
Run Code Online (Sandbox Code Playgroud)