Pregunta

Estoy trazando un histograma usando

plt.imshow(hist2d, norm = LogNorm(), cmap = gray)

dónde hist2d es una matriz de valores de histograma.Esto funciona bien excepto para los elementos en hist2d que son cero.En particular obtengo la siguiente imagen

Histogram

pero me gustaría que las manchas blancas fueran negras.

¡Gracias!

¿Fue útil?

Solución

Aquí tienes un método alternativo que no requiere que modifiques tus datos estableciendo un valor rgb para los píxeles defectuosos.

import copy
data = np.arange(25).reshape((5,5))
my_cmap = copy.copy(matplotlib.cm.get_cmap('gray')) # copy the default cmap
my_cmap.set_bad((0,0,0))
plt.imshow(data, 
           norm=matplotlib.colors.LogNorm(), 
           interpolation='nearest', 
           cmap=my_cmap)

El problema es que los contenedores con 0 no se pueden normalizar adecuadamente los registros, por lo que se marcan como "malos", y se asignan de forma diferente.El comportamiento predeterminado es no dibujar nada en esos píxeles.También puede especificar de qué color dibujar los píxeles que están por encima o por debajo de los límites del mapa de colores (el valor predeterminado es dibujarlos con el color más alto/más bajo).

Otros consejos

Si está satisfecho con la escala de color tal como está y simplemente desea que los valores 0 sean negros, simplemente cambiaría la matriz de entrada para que los 0 sean reemplazados por el siguiente valor más pequeño:

import matplotlib.pyplot as plt
import matplotlib.cm, matplotlib.colors
import numpy

hist2d = numpy.arange(9).reshape(3,3)

plt.imshow(numpy.maximum(hist2d, sorted(hist2d.flat)[1]), 
           interpolation='nearest', 
           norm = matplotlib.colors.LogNorm(), 
           cmap = matplotlib.cm.gray)

produce

0- loading=mimimum picture">

¿Esto se generó con la función matplotlib hist2d?

Todo lo que necesita hacer es revisar la matriz y establecer un valor mínimo arbitrario, luego asegurarse de trazarlo con límites fijos.

for f in hist2d:
   f += 1e-3

luego, cuando muestre la figura, todos los espacios en blanco estarán ahora en el valor mínimo y aparecerán en el gráfico lognormal.Sin embargo, si deja que hist2d elija automáticamente la escala por usted, querrá usar el valor mínimo 1e-3 como mínimo.Para evitar esto, debe configurar los valores vmin y vmax en hist2d

hist2d(x,y,bins=40, norm=LogNorm(), vmin=1, vmax=1e4)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top