Ich brauche eine Figur in Matplotlib, wo beide Achsen immer die gleiche Länge haben. Dazu benutze ich die Option 'gleich'. In den meisten Fällen funktioniert es ziemlich gut und ich bekomme die erwarteten Ergebnisse (siehe Abbildung 1), aber wenn die Werte der y-Achse viel höher als x sind, zeigt die Abbildung ein unerwartetes Verhalten (siehe Abbildung 2). Kennt jemand dieses Verhalten von Matplotlib?matplotlib axes.set_aspect ('equal') verhält sich nicht wie erwartet
Danke, Jörg
host = SubplotHost(fig, 111)
try:
min_x_val = min(x for x in self.x_values if x is not None)
max_x_val = max(self.x_values)
except ValueError:
return
max_y_val = list()
for n, evaluator in enumerate(self.cleaned_evaluators):
max_y_val.append(max(self.y_values[n]))
# axis settings
host.axis['left'].label.set_fontsize('small')
host.axis['left'].major_ticklabels.set_fontsize('small')
host.axis['bottom'].label.set_fontsize('small')
host.axis['bottom'].major_ticklabels.set_fontsize('small')
host.axis['bottom'].major_ticklabels.set_rotation(0)
host.set_ylabel(y_label)
host.set_xlabel(x_label)
host.set_xlim(0, max_x_val)
host.set_ylim(0, max_y_val)
host.minorticks_on()
host.toggle_axisline(False)
host.axes.set_aspect('equal')
host.grid(True, alpha=0.4)
return fig
Abbildung 1:
Abbildung 2:
Tatsächlich verhält es als expected.'set_aspect (‚gleich‘) 'bedeutet, dass eine Einheit auf der x-Achse ist von gleicher Länge wie eine Einheit auf dem y-Achse, wie in Abbildung 1 zu sehen. – hooy
Sie können einen numerischen Wert an 'set_aspect' übergeben, siehe [Dokumentation] (http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_aspect). Nimmt man den Quotienten von "x" und "y", sollte man in der Lage sein, die Achsen so zu skalieren, dass sie die gleiche Länge haben. – Bakuriu
Beachten Sie, dass Ihr erstes Beispiel (Abbildung 1) nicht wirklich quadratisch ist; es ist etwa 430 Pixel breit und 400 Pixel hoch. Dies steht im Einklang mit den leicht unterschiedlichen Datenbereichen für die beiden Achsen (0 bis 3,5 für die X-Achse, 0 bis 3,25 für die Y-Achse), da 'set_aspect ('equal')' die gleiche Datenskalierung (Daten Werte pro Pixel) für beide Achsen. –