Notiz
Klicken Sie hier , um den vollständigen Beispielcode herunterzuladen
Äxte Box Aspekt #
Diese Demo zeigt, wie Sie den Aspekt einer Axes-Box direkt über einstellen können
set_box_aspect
. Der Box-Aspekt ist das Verhältnis zwischen Achsenhöhe und Achsenbreite in physikalischen Einheiten, unabhängig von den Datengrenzen. Dies ist sinnvoll, um zB einen quadratischen Plot unabhängig von den darin enthaltenen Daten zu erzeugen, oder um neben einem Bildplot mit festem (Daten-)Aspekt einen gewöhnlichen Plot mit gleichen Achsenabmessungen zu haben.
Im Folgenden sind einige Anwendungsfälle für set_box_aspect
.
A quadratische Achsen, unabhängig von Daten #
Produzieren Sie eine quadratische Achse, egal wie die Datengrenzen sind.
import numpy as np
import matplotlib.pyplot as plt
fig1, ax = plt.subplots()
ax.set_xlim(300, 400)
ax.set_box_aspect(1)
plt.show()
Quadratische Doppelachsen #
Produzieren Sie eine Vierkantachse mit einer Zwillingsachse. Die Zwillingsachse übernimmt den Box-Aspekt der Elternachse.
fig3, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot([0, 10])
ax2.plot([12, 10])
ax.set_box_aspect(1)
plt.show()
Normales Diagramm neben Bild Nr.
Beim Erstellen eines Bilddiagramms mit festem Datenaspekt und dem Standardwert
adjustable="box"
neben einem normalen Diagramm wären die Achsen in der Höhe ungleich. set_box_aspect
bietet eine einfache Lösung dafür, indem es erlaubt, dass die Achsen des normalen Plots die Bildabmessungen als Box-Aspekt verwenden.
Dieses Beispiel zeigt auch, dass es constrained_layout
gut mit einem festen Box-Aspekt zusammenspielt.
fig4, (ax, ax2) = plt.subplots(ncols=2, constrained_layout=True)
np.random.seed(19680801) # Fixing random state for reproducibility
im = np.random.rand(16, 27)
ax.imshow(im)
ax2.plot([23, 45])
ax2.set_box_aspect(im.shape[0]/im.shape[1])
plt.show()
Vierkantfuge/Randgrundstück #
Es kann wünschenswert sein, Randverteilungen neben einer Darstellung gemeinsamer Daten anzuzeigen. Im Folgenden wird ein quadratisches Diagramm erstellt, bei dem der Kastenaspekt der Randachsen gleich den Breiten- und Höhenverhältnissen der Gitterspezifikation ist. Dadurch wird sichergestellt, dass alle Achsen unabhängig von der Größe der Figur perfekt ausgerichtet sind.
fig5, axs = plt.subplots(2, 2, sharex="col", sharey="row",
gridspec_kw=dict(height_ratios=[1, 3],
width_ratios=[3, 1]))
axs[0, 1].set_visible(False)
axs[0, 0].set_box_aspect(1/3)
axs[1, 0].set_box_aspect(1)
axs[1, 1].set_box_aspect(3/1)
np.random.seed(19680801) # Fixing random state for reproducibility
x, y = np.random.randn(2, 400) * [[.5], [180]]
axs[1, 0].scatter(x, y)
axs[0, 0].hist(x)
axs[1, 1].hist(y, orientation="horizontal")
plt.show()
Vierkantfuge/Randgrundstück #
Beim Einstellen des Box-Aspekts kann man immer noch den Daten-Aspekt einstellen. Hier erstellen wir Axes mit einem doppelt so langen Kästchen und verwenden einen "gleichen" Datenaspekt für seinen Inhalt, dh der Kreis bleibt tatsächlich kreisförmig.
fig6, ax = plt.subplots()
ax.add_patch(plt.Circle((5, 3), 1))
ax.set_aspect("equal", adjustable="datalim")
ax.set_box_aspect(0.5)
ax.autoscale()
plt.show()
Box-Aspekt für viele Nebenhandlungen #
Es ist möglich, den Box-Aspekt bei der Initialisierung an Axes zu übergeben. Im Folgenden wird ein 2 x 3-Subplot-Gitter mit allen quadratischen Achsen erstellt.
fig7, axs = plt.subplots(2, 3, subplot_kw=dict(box_aspect=1),
sharex=True, sharey=True, constrained_layout=True)
for i, ax in enumerate(axs.flat):
ax.scatter(i % 3, -((i // 3) - 0.5)*200, c=[plt.cm.hsv(i / 6)], s=300)
plt.show()
Verweise
In diesem Beispiel wird die Verwendung der folgenden Funktionen, Methoden, Klassen und Module gezeigt:
Gesamtlaufzeit des Skripts: ( 0 Minuten 2.779 Sekunden)