pcolormesh pcolor matplot examples example colormesh color cmap numpy matplotlib scipy

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)