2012-10-06 34 views
12

Me estoy moviendo de MatLab a Python y jugando con la función imshow.imshow (img, cmap = cm.gray) muestra un blanco para 128 valor

Parece que no entiendo por qué no muestra el valor 128 como gris con He elegido el cmap para ser escala de grises.

Code example

Parece, ya que utiliza la escala de grises para la más alta (128) y valores más bajos .. yo quiero que use la escala de grises para [0: 255]. ¿Cómo puedo hacer eso?

Respuesta

23

Uso los vmin y vmax parámetros:

plt.imshow(bg, cmap=plt.get_cmap('gray'), vmin=0, vmax=255) 

Sin especificar vmin y vmax, plt.imshow auto-ajusta su gama de al min y max de los datos.


No sé de una manera de establecer por defecto vmin y vmax parámetros para todas las parcelas imshow, pero se puede usar functools.partial para preparar un comando imshow similar medida con parámetros por defecto establecido:

import matplotlib.pyplot as plt 
import numpy as np 
import functools 

bwimshow = functools.partial(plt.imshow, vmin=0, vmax=255, 
          cmap=plt.get_cmap('gray')) 

dots = np.random.randn(10, 10)*255 
bwimshow(dots) 
cbar = plt.colorbar() 

plt.show() 
+0

¡Muchas gracias! :-) - ¿hay alguna forma de establecer como valores predeterminados para todos los gráficos? – Norfeldt

+2

Sí, usando 'functools.partial'. Véase más arriba. – unutbu

Cuestiones relacionadas