Seitenverhältnis Geschichten mit verschiedenen y-Achsen
Ich würde gerne den folgenden code zu produzieren 4 subplots der gleichen Größe mit einer gemeinsamen Aspekt-Verhältnis zwischen der Größe der x-Achse und y-Achse von mir eingestellt. Unter Bezugnahme auf das folgende Beispiel, ich möchte alle Nebenhandlungen genau so Aussehen wie das erste (oben Links). Was ist falsch richtig ist, dass sich die Größe der y-Achse ist die Korrelation mit seinen größten Wert. Das ist das Verhalten möchte ich vermeiden.
import matplotlib.pyplot as plt
import numpy as np
def main():
fig = plt.figure(1, [5.5, 3])
for i in range(1,5):
fig.add_subplot(221+i-1, adjustable='box', aspect=1)
plt.plot(np.arange(0,(i)*4,i))
plt.show()
if __name__ == "__main__":
main()
Überraschend, matplotlib erzeugt die richtige Standard (Bild unten):
import matplotlib.pyplot as plt
import numpy as np
def main():
fig = plt.figure(1, [5.5, 3])
for i in range(1,5):
fig.add_subplot(221+i-1)
plt.plot(np.arange(0,(i)*4,i))
plt.show()
Ich möchte nur hinzufügen, um diese Fähigkeit zu Steuern, das Aspekt-Verhältnis zwischen den Längen der x-und y-Achsen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich nicht ganz sagen, was Sie wollen mit Ihrer Frage.
Wollen Sie alle Grundstücke die gleichen Daten Grenzen?
Wenn dem so ist, verwenden Sie freigegebene Achsen (ich bin mit
subplots
hier, aber Sie können Sie vermeiden, wenn Sie wollen, zu bleiben, um matlab-Stil-code):Wenn Sie wollen, dass Sie alle teilen Ihre Achsen Grenzen, aber
adjustable='box'
(d.h. nicht-quadratische Achsen-Grenzen), Gebrauchadjustable='box-forced'
:Edit: Sorry, ich bin noch ein bisschen verwirrt. Wollen Sie so etwas?
Okay, ich denke, dass ich schließlich Ihre Frage zu verstehen. Wir beide bedeutete ganz unterschiedliche Dinge von "Seitenverhältnis".
In matplotlib, das Seitenverhältnis der plot bezieht sich auf die relative Skalierung der Daten beschränkt. In anderen Worten, wenn das Seitenverhältnis der plot ist 1, eine Linie mit einer Steigung erscheint bei 45 Grad. Sie wurden unter der Annahme, dass das Seitenverhältnis angewendet, um die Gliederung der Achsen und nicht die Daten aufgetragen auf der Achse.
Wollen Sie nur die Umrisse der Nebenhandlungen quadratisch sein. (In dem Fall, Sie alle haben unterschiedliche Seitenverhältnisse, wie definiert durch matplotlib.)
In diesem Fall müssen Sie eine quadratische Abbildung. (Es gibt auch andere Wege, aber nur ein Quadrat Zahl ist weit einfacher. Matplotlib Achsen füllen einen Raum, der proportional ist zu der Größe der Figur, Sie sind in.)
Kämmen die Antwort von Joe Kington mit neue pythonic Stil für die gemeinsamen Achsen quadratischen subplots in matplotlib?
und ein weiterer post, dass ich fürchte, ich kann nicht finden es wieder, ich habe eine code für die präzise Einstellung des Verhältnisses der box auf einen bestimmten Wert.
Lassen desired_box_ratioN geben Sie die gewünschte Verhältnis zwischen y und x Seiten der box.
temp_inverse_axis_ratioN ist das Verhältnis zwischen x-und y-Seiten des aktuellen Diagramms; seit 'Aspekt' ist das Verhältnis zwischen y-und x-Skala (und nicht Achsen), müssen wir um Aspekt zu desired_box_ratioN * temp_inverse_axis_ratioN.
Die Theorie
Verschiedenen Koordinatensystemen existiert in matplotlib. Die Unterschiede zwischen verschiedenen Koordinatensystemen, können wirklich verwirren viele Menschen. Was der OP will, ist das Seitenverhältnis in der Anzeige zu koordinieren, aber
ax.set_aspect()
ist die Einstellung des Aspekt-Verhältnisses in den Daten zu koordinieren. Ihre Beziehung kann wie folgt formuliert werden:wo
aspect
ist das argument zu verwenden, inset_aspect
MethodedataRatio
ist das Seitenverhältnis, in-Daten zu koordinieren und zudispRatio
ist Ihre gewünschte Seitenverhältnis im display zu koordinieren.Die Praxis
Es ist ein
get_data_ratio
Methode, die wir nutzen können, um unseren code übersichtlicher. Eine Arbeit Codeausschnitt unten dargestellt:Ich geschrieben habe auch einen ausführlichen post über all diese Dinge hier.