Muszę automatycznie generować wykresy rozproszenia dla kilku zestawów danych 2D.
Domyślnie współczynnik kształtu jest ustawiony ax.set_aspect(aspect="equal")
, który większość czasu działa, ponieważ x,y
wartości są rozmieszczone mniej więcej w kwadratu.
Czasami jednak napotykam zestaw danych, który po narysowaniu z equal
stosunek, wygląda następująco:
tj .: zbyt wąski na danej osi. Dla powyższego obrazu oś wynosi w przybliżeniu 1: 8.
W takim przypadku współczynnik kształtu wynosi ax.set_aspect(aspect="auto")
spowodowałoby znacznie lepszą fabułę:
Teraz nie chcę tego ustawić aspect="auto"
jako moje domyślne dla wszystkich zestawów danych, ponieważ używają aspect="equal"
w rzeczywistości jest poprawny sposób wyświetlania takiego wykresu punktowego.
Muszę wrócić do używania ax.set_aspect(aspect="auto")
tylko w przypadkach takich jak ten powyżej.
Pytanie: czy istnieje sposób, aby wiedzieć przed ręką, jeśli proporcje działki będą zbyt wąskie, jeśli aspect="equal"
jest używany? Np. Uzyskanie rzeczywistego współczynnika kształtu zestawu danych wykreślanych.
W ten sposób, na podstawie takiej liczby, mogę dostosować współczynnik kształtu do czegoś bardziej zdrowego (np .: auto
lub jakiś inny współczynnik proporcji) zamiast "equal"
.
Odpowiedzi:
4 dla odpowiedzi № 1Coś takiego powinno zrobić,
aspect = (max(x) - min(x)) / (max(y) - min(y))
2 dla odpowiedzi nr 2
The axes
metoda get_data_ratio
podaje proporcje granic twoich danych jak pokazano.¹
ax.get_data_ratio()
na przykład:
M = 4.0
ax.set_aspect("equal" if 1/M < ax.get_data_ratio() < M else "auto")
¹Jest to odwrotność odpowiedź @farenortha kiedy osie są przybliżane dookoła danych, tj. kiedy max(y) == max(ax.get_ylim())
ponieważ jest obliczana przy użyciu zakresów w ax.get_ybound
i ax.get_xbound
.