Ä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()
Äxte Box Aspekt

Gemeinsame quadratische Achsen #

Produzieren Sie gemeinsame Subplots, die in der Größe quadratisch sind.

fig2, (ax, ax2) = plt.subplots(ncols=2, sharey=True)

ax.plot([1, 5], [0, 10])
ax2.plot([100, 500], [10, 15])

ax.set_box_aspect(1)
ax2.set_box_aspect(1)

plt.show()
Äxte Box Aspekt

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()
Äxte Box Aspekt

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_aspectbietet 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_layoutgut 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()
Äxte Box Aspekt

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()
Äxte Box Aspekt

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()
Äxte Box Aspekt

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()
Äxte Box Aspekt

Verweise

In diesem Beispiel wird die Verwendung der folgenden Funktionen, Methoden, Klassen und Module gezeigt:

Gesamtlaufzeit des Skripts: ( 0 Minuten 2.779 Sekunden)

Galerie generiert von Sphinx-Gallery