Dalla plt.imshow()
guida ufficiale, sappiamo che l'aspetto controlla le proporzioni degli assi. Bene, nelle mie parole, l'aspetto è esattamente il rapporto tra unità x e unità y . La maggior parte delle volte vogliamo mantenerlo come 1 poiché non vogliamo distorcere le cifre involontariamente. Tuttavia, ci sono effettivamente casi in cui abbiamo bisogno di specificare un valore diverso da 1. L'interrogante ha fornito un buon esempio che gli assi xey possono avere unità fisiche differenti. Supponiamo che x sia in km ey in m. Quindi per un dato 10x10, l'estensione dovrebbe essere [0,10km, 0,10m] = [0, 10000m, 0, 10m]. In tal caso, se continuiamo a utilizzare l'aspetto predefinito = 1, la qualità della figura è davvero pessima. Possiamo quindi specificare aspect = 1000 per ottimizzare la nostra figura. I seguenti codici illustrano questo metodo.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
rng=np.random.RandomState(0)
data=rng.randn(10,10)
plt.imshow(data, origin = 'lower', extent = [0, 10000, 0, 10], aspect = 1000)
Tuttavia, penso che ci sia un'alternativa in grado di soddisfare la domanda dell'interrogante. Possiamo semplicemente impostare l'estensione come [0,10,0,10] e aggiungere ulteriori etichette dell'asse xy per denotare le unità. Codici come segue.
plt.imshow(data, origin = 'lower', extent = [0, 10, 0, 10])
plt.xlabel('km')
plt.ylabel('m')
Per fare una figura corretta , dobbiamo sempre tenerlo presentex_max-x_min = x_res * data.shape[1]
e y_max - y_min = y_res * data.shape[0]
, dove extent = [x_min, x_max, y_min, y_max]
. Per impostazione predefinita, aspect = 1
ciò significa che l'unità pixel è quadrata. Questo comportamento predefinito funziona bene anche per x_res e y_res che hanno valori diversi. Estendendo l'esempio precedente, supponiamo che x_res sia 1.5 mentre y_res sia 1. Quindi l'estensione dovrebbe essere uguale a [0,15,0,10]. Utilizzando l'aspetto predefinito, possiamo avere pixel di colore rettangolari, mentre l'unità pixel è ancora quadrata!
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10])
data=rng.randn(10,5)
plt.imshow(data, origin = 'lower', extent = [0, 5, 0, 5])
L'aspetto del pixel a colori è x_res / y_res
. impostando il suo aspetto sull'aspetto dell'unità pixel (cioè aspect = x_res / y_res = ((x_max - x_min) / data.shape[1]) / ((y_max - y_min) / data.shape[0])
) darebbe sempre un pixel di colore quadrato. Possiamo cambiare aspetto = 1,5 in modo che l'unità dell'asse x sia 1,5 volte l'unità dell'asse y, portando a un pixel di colore quadrato e una figura intera quadrata ma un'unità di pixel rettangolare. A quanto pare, normalmente non è accettato.
data=rng.randn(10,10)
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.5)
Il caso più indesiderato è quello di impostare l'aspetto su un valore arbitrario, come 1.2, che non porterà a pixel di unità quadrate né pixel di colore quadrati.
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.2)
Per farla breve, è sempre sufficiente impostare l'estensione corretta e lasciare che matplotlib faccia le cose rimanenti per noi (anche se x_res! = Y_res)! Cambia aspetto solo quando è d'obbligo.
scalar
sull'opzione. Sembra scalare loy-axis
scalare dato.