la figura de imshow () es demasiado pequeña

96

Estoy tratando de visualizar una matriz numpy usando imshow () ya que es similar a imagesc () en Matlab.

imshow(random.rand(8, 90), interpolation='nearest')

La figura resultante es muy pequeña en el centro de la ventana gris, mientras que la mayor parte del espacio está desocupado. ¿Cómo puedo configurar los parámetros para agrandar la figura? Probé figsize = (xx, xx) y no es lo que quiero. ¡Gracias!

Ruofeng
fuente
1
Solo agrego este comentario en caso de que otros como yo luchen por aterrizar en esta publicación --- el problema ocurre (más visiblemente) cuando los datos xey son de diferentes órdenes de magnitud; La respuesta de @ bmu lo corrige
mwarrior

Respuestas:

142

Si no le da un aspectargumento a imshow, usará el valor de image.aspecten su matplotlibrc. El valor predeterminado para este valor en un nuevo matplotlibrces equal. Por imshowlo tanto , trazará su matriz con la misma relación de aspecto.

Si usted no necesita un aspecto igual se puede establecer aspectaauto

imshow(random.rand(8, 90), interpolation='nearest', aspect='auto')

que da la siguiente figura

imshow-auto

Si desea una relación de aspecto igual, debe adaptar su figsizesegún el aspecto

fig, ax = subplots(figsize=(18, 2))
ax.imshow(random.rand(8, 90), interpolation='nearest')
tight_layout()

que te da:

imshow-equal

bmu
fuente
además de definir la relación de aspecto, ¿es posible obtener (definir) el tamaño de los mosaicos de colores?
Alexander Cska
36

Eso es extraño, definitivamente funciona para mí:

from matplotlib import pyplot as plt

plt.figure(figsize = (20,2))
plt.imshow(random.rand(8, 90), interpolation='nearest')

Estoy usando el backend "MacOSX", por cierto.

Nikolas
fuente
4
para que quede claro, debe ser plt.figure(figsize = (x_new, y_new))y para imgshow () ahora debe importar ioimage porque el SciPy imageshow () quedará obsoleto pronto
Agile Bean
1
@AgileBean sería útil si editara esta publicación con esa información o la agregara como respuesta a esta pregunta
baxx
2

Yo también soy nuevo en Python. Aquí hay algo que parece que hará lo que quieres

axes([0.08, 0.08, 0.94-0.08, 0.94-0.08]) #[left, bottom, width, height]
axis('scaled')`

Creo que esto decide el tamaño del lienzo.

Toylas
fuente
1

Actualización 2020

según lo solicitado por @baxxx, aquí hay una actualización porque random.randestá obsoleta mientras tanto.

Esto funciona con matplotlip 3.2.1:

from matplotlib import pyplot as plt
import random
import numpy as np

random = np.random.random ([8,90])

plt.figure(figsize = (20,2))
plt.imshow(random, interpolation='nearest')

Esto traza:

ingrese la descripción de la imagen aquí

Para cambiar el número aleatorio, puede experimentar con np.random.normal(0,1,(8,90))(aquí media = 0, desviación estándar = 1).

Frijol ágil
fuente