numpy - matplot - pcolormesh con valores perdidos?
pcolormesh python example (3)
Tengo 3 ndarrays 1-D: x, y, z
y el siguiente código:
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()
Mi trama se queda en blanco y sospecho que se debe a que el método = interpolación ''lineal'' sale con nans. He intentado convertirlo en una matriz enmascarada, pero sin éxito, el gráfico todavía está en blanco. ¿Puedes decirme qué estoy haciendo mal? Gracias.
Lo tengo. Esto parece circular, pero esta fue la solución:
import numpy.ma as ma
Zm = ma.masked_where(np.isnan(Z),Z)
plt.pcolormesh(X,Y,Zm.T)
Si la matriz Z contiene nan
''s, tiene que ser una matriz enmascarada para pcolormesh
, que debe crearse con ma.masked_where
o, alternativamente,
Zm = ma.array(Z,mask=np.isnan(Z))
Tenga en cuenta que el enmascaramiento explícito ya no es necesario en matplotlib master, ya que las matrices ahora se enmascaran automáticamente de forma interna. Se incorporará a matplotlib> 2.1. Ver mi solicitud de extracción combinada https://github.com/matplotlib/matplotlib/pull/5451
Así que ahora es tan simple como
plt.pcolormesh(X,Y,Z.T)
Una ligera mejora en la respuesta elegida.
import numpy.ma as ma
Zm = ma.masked_invalid(Z)
plt.pcolormesh(X, Y, Zm.T)
masked_invalid enmascara todos los valores de NaN, ahorrando así la necesidad de especificar
mask = np.isnan(Z)