Aus dem plt.imshow()
offiziellen Leitfaden wissen wir, dass der Aspekt das Seitenverhältnis der Achsen steuert. In meinen Worten ist der Aspekt genau das Verhältnis von x- Einheit und y- Einheit . Meistens wollen wir es als 1 behalten, da wir Zahlen nicht unbeabsichtigt verzerren wollen. Es gibt jedoch tatsächlich Fälle, in denen wir einen anderen Aspekt als 1 angeben müssen. Der Fragesteller lieferte ein gutes Beispiel dafür, dass die x- und y-Achse unterschiedliche physikalische Einheiten haben können. Nehmen wir an, dass x in km und y in m ist. Daher sollte für 10x10-Daten die Ausdehnung [0,10 km, 0,10 m] = [0, 10000 m, 0, 10 m] sein. In diesem Fall ist die Qualität der Figur wirklich schlecht, wenn wir weiterhin den Standardaspekt = 1 verwenden. Wir können daher Aspekt = 1000 angeben, um unsere Zahl zu optimieren. Die folgenden Codes veranschaulichen diese Methode.
%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)

Dennoch denke ich, dass es eine Alternative gibt, die die Nachfrage des Fragestellers befriedigen kann. Wir können einfach die Ausdehnung auf [0,10,0,10] einstellen und zusätzliche Beschriftungen für die xy-Achse hinzufügen, um die Einheiten zu kennzeichnen. Codes wie folgt.
plt.imshow(data, origin = 'lower', extent = [0, 10, 0, 10])
plt.xlabel('km')
plt.ylabel('m')

Um eine korrekte Zahl zu erhalten, sollten wir immer daran denken, dass x_max-x_min = x_res * data.shape[1]
und y_max - y_min = y_res * data.shape[0]
wo extent = [x_min, x_max, y_min, y_max]
. Standardmäßig aspect = 1
bedeutet dies, dass das Einheitspixel quadratisch ist. Dieses Standardverhalten funktioniert auch für x_res und y_res mit unterschiedlichen Werten. Nehmen wir an, dass x_res 1,5 ist, während y_res 1 ist. Daher sollte die Ausdehnung gleich [0,15,0,10] sein. Mit dem Standardaspekt können wir rechteckige Farbpixel haben, während das Einheitspixel immer noch quadratisch ist!
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10])
# Or we have similar x_max and y_max but different data.shape, leading to different color pixel res.
data=rng.randn(10,5)
plt.imshow(data, origin = 'lower', extent = [0, 5, 0, 5])

Der Aspekt des Farbpixels ist x_res / y_res
. Das Setzen seines Aspekts auf den Aspekt des Einheitspixels (dh aspect = x_res / y_res = ((x_max - x_min) / data.shape[1]) / ((y_max - y_min) / data.shape[0])
) würde immer ein quadratisches Farbpixel ergeben. Wir können Aspekt = 1,5 so ändern, dass die x-Achseneinheit die 1,5-fache y-Achseneinheit ist, was zu einem quadratischen Farbpixel und einer quadratischen ganzen Figur, aber einer rechteckigen Pixeleinheit führt. Anscheinend wird es normalerweise nicht akzeptiert.
data=rng.randn(10,10)
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.5)

Der unerwünschteste Fall ist, dass für den eingestellten Aspekt ein beliebiger Wert wie 1,2 festgelegt wird, der weder zu quadratischen Einheitspixeln noch zu quadratischen Farbpixeln führt.
plt.imshow(data, origin = 'lower', extent = [0, 15, 0, 10], aspect = 1.2)

Kurz gesagt, es reicht immer aus, das richtige Ausmaß einzustellen und die Matplotlib die restlichen Dinge für uns erledigen zu lassen (obwohl x_res! = Y_res)! Ändern Sie den Aspekt nur, wenn dies ein Muss ist.
scalar
Option sagen . Es scheint deny-axis
um den gegebenen Skalar zu skalieren .