la cifra di imshow () è troppo piccola


96

Sto cercando di visualizzare un array numpy usando imshow () poiché è simile a imagesc () in Matlab.

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

La figura risultante è molto piccola al centro della finestra grigia, mentre la maggior parte dello spazio è libero. Come posso impostare i parametri per ingrandire la figura? Ho provato figsize = (xx, xx) e non è quello che voglio. Grazie!


1
Aggiungo solo questo commento nel caso altri come me faticano ad atterrare su questo post --- il problema si verifica (in modo più evidente) quando i dati xey sono di diversi ordini di grandezza; La risposta di @ bmu lo risolve
mwarrior

Risposte:


139

Se non dai un aspectargomento a imshow, userà il valore per image.aspectnel tuo matplotlibrc. L'impostazione predefinita per questo valore in un nuovo matplotlibrcè equal. Quindi imshowtraccerà il tuo array con proporzioni uguali.

Se non avete bisogno di un aspetto uguale è possibile impostare aspectaauto

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

che dà la figura seguente

imshow-auto

Se vuoi un rapporto di aspetto uguale devi adattare il tuo in figsizebase all'aspetto

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

che ti dà:

imshow-equal


oltre a definire le proporzioni, è possibile ottenere (definire) la dimensione delle tessere colorate?
Alexander Cska

36

È strano, sicuramente funziona per me:

from matplotlib import pyplot as plt

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

Sto usando il backend "MacOSX", btw.


4
per essere chiari, deve essere plt.figure(figsize = (x_new, y_new))e per imgshow () devi ora importare ioimage perché SciPy imageshow () sarà presto deprecato
Agile Bean

1
@AgileBean sarebbe utile se tu dovessi modificare questo post con queste informazioni o aggiungerlo come risposta a questa domanda
baxx

2

Anch'io sono nuovo in Python. Ecco qualcosa che sembra farà quello che vuoi

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

Credo che questo decida la dimensione della tela.


1

Aggiorna 2020

come richiesto da @baxxx, ecco un aggiornamento perché random.randnel frattempo è deprecato.

Funziona 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')

Questo trama:

inserisci qui la descrizione dell'immagine

Per modificare il numero casuale, puoi sperimentare np.random.normal(0,1,(8,90))(qui media = 0, deviazione standard = 1).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.