Pregunta

Estoy intentando utilizar imshow en matplotlib a los datos de la trama como un mapa de calor, pero algunos de los valores son NaNs. Me gustaría que los NaNs que pudiera ser emitida 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 todo azul (el color más bajo en el mapa de colores de chorro). Sin embargo, si hago el trazado de esta manera:

ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)

- entonces consigo algo mejor, pero los valores NaN se dibujan del mismo color que Vmin ... ¿Hay una manera elegante que puedo establecer NaNs ser dibujado con un color especial (por ejemplo: gris o transparente)?

¿Fue útil?

Solución

Gestión de recursos humanos, parece que puedo utilizar una matriz enmascarado 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. :]

Otros consejos

Con las nuevas versiones de Matplotlib, no es necesario el uso de una matriz enmascarado más.

Por ejemplo, vamos a generar una matriz en donde cada valor séptimo es un NaN:

arr = np.arange(100, dtype=float).reshape(10, 10)
arr[~(arr % 7).astype(bool)] = np.nan

puede modificar el mapa de colores actual y la trama de la matriz con las siguientes líneas:

current_cmap = matplotlib.cm.get_cmap()
current_cmap.set_bad(color='red')
plt.imshow(arr)

número trama

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top