/ / matplotlib: uzyskaj stosunek osi wykresu - python, matplotlib

matplotlib: pobierz stosunek osi wykresu - python, matplotlib

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:

wprowadź opis obrazu tutaj

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łę:

wprowadź opis obrazu tutaj

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 № 1

Coś 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.