real - matplotlib python
¿Cómo puedo trazar los valores NaN como un color especial con imshow en matplotlib? (3)
Estoy intentando usar imshow en matplotlib para trazar los datos como un mapa de calor, pero algunos de los valores son NaN. Me gustaría que los NaN se rendericen como un color especial que no se encuentra en el mapa de colores.
ejemplo:
import numpy as np
import matplotlib.pyplot as plt
f = plt.figure()
ax = f.add_subplot(111)
a = np.arange(25).reshape((5,5)).astype(float)
a[3,:] = np.nan
ax.imshow(a, interpolation=''nearest'')
f.canvas.draw()
La imagen resultante es inesperadamente azul (el color más bajo en el mapa de colores del jet). Sin embargo, si hago el trazado de esta manera:
ax.imshow(a, interpolation=''nearest'', vmin=0, vmax=24)
--entonces obtengo algo mejor, pero los valores NaN se dibujan del mismo color que vmin ... ¿Hay alguna manera elegante de poder establecer NaNs para que se dibujen con un color especial (por ejemplo: gris o transparente)?
A mi no me sirvió. Recibí el mensaje de error, así que hice una solución:
a[3,:] = -999
masked_array=np.ma.masked_where(a==-999, a)
cmap = matplotlib.cm.jet
cmap.set_bad(''w'',1.)
ax.imshow(masked_array, interpolation=''nearest'', cmap=cmap)
Con las versiones más nuevas de Matplotlib, ya no es necesario usar una matriz enmascarada.
Por ejemplo, generemos una matriz donde cada 7mo valor sea un NaN:
arr = np.arange(100, dtype=float).reshape(10, 10)
arr[~(arr % 7).astype(bool)] = np.nan
Podemos modificar el mapa de colores actual y trazar la matriz con las siguientes líneas:
current_cmap = matplotlib.cm.get_cmap()
current_cmap.set_bad(color=''red'')
plt.imshow(arr)
Hrm, parece que puedo usar una matriz enmascarada para hacer esto:
masked_array = np.ma.array (a, mask=np.isnan(a))
cmap = matplotlib.cm.jet
cmap.set_bad(''white'',1.)
ax.imshow(masked_array, interpolation=''nearest'', cmap=cmap)
Esto debería ser suficiente, aunque todavía estoy abierto a sugerencias. :]