Jakie są różnice między add_axes i add_subplot?


W poprzednim

odpowiedź
https://stackoverflow.com/a/43283905
Poradzono mi użyć
add_subplot
zamiast
add_axes
, aby poprawnie wyświetlić osie, ale szukając dokumentacji, nie mogłem dowiedzieć się, kiedy i dlaczego powinienem użyć któregokolwiek z nich Funkcje.
Czy ktoś może wyjaśnić te różnice?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Wspólna podstawa
>
Obie,
add_axes
https://matplotlib.org/api/_as ... _axes
i
add_subplot
https://matplotlib.org/api/_as ... bplot
dodaj osie do kształtu. Oba zwracają obiekt
matplotlib.axes.Axes
.
Jednak mechanizm dodawania osi jest znacząco inny.
add_axes
>
Podpis rozmówcy
add_axes
https://matplotlib.org/api/_as ... _axes
to
add_axes (rect)
, gdzie
rect
to lista
[x0, y0, width, height]
oznaczająca lewy dolny punkt nowych osi on Obraz współrzędny
(x0, y0)
oraz jego szerokość i wysokość. W ten sposób osie są ustawione we współrzędnych bezwzględnych na płótnie. Na przykład.
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])

umieszcza kształt na płótnie, który jest dokładnie tak duży jak samo płótno.
add_subplot
>
Podpis rozmówcy
add_subplot
https://matplotlib.org/api/_as ... bplot
nie zapewnia bezpośrednio możliwości umieszczania osi w określonej pozycji. Raczej pozwala określić, gdzie powinny znajdować się osie zgodnie z siatką podproblemów. Zwykłym i najprostszym sposobem określenia tej pozycji jest notacja 3 liczb całkowitych,
fig = plt.figure()
ax = fig.add_subplot(231)

Ten przykład tworzy nową oś na pierwszej pozycji (
1
) na siatce z dwoma wierszami i trzema kolumnami. Aby uzyskać tylko jedną oś, zostanie użyty
add_subplot (111)
(pierwszy wykres na siatce 1 na 1 subplot).
Zaletą tej metody jest to, że matplotlib dba o dokładne pozycjonowanie. Domyślnie
add_subplot (111)
tworzy oś znajdującą się pod adresem
[0.125,0.11,0.775,0.77]
lub podobnym, co już pozostawia wystarczająco dużo miejsca wokół osi na tytuł i etykiety (pola wyboru). Jednak pozycja ta może się również zmieniać w zależności od innych elementów grafiki, zestawu tytułów itp.
Można go również dostosować za pomocą
pyplot.subplots_adjust (...)
lub
pyplot.tight_layout ()
.
W większości przypadków metoda
add_subplot
jest preferowaną metodą tworzenia osi dla wykresów na płótnie. Tylko w przypadkach, w których liczy się dokładne pozycjonowanie,
add_axes
może być przydatne.

Przykład
>
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (5,3)fig = plt.figure()
fig.add_subplot(241)
fig.add_subplot(242)
ax = fig.add_subplot(223)
ax.set_title("subplots")fig.add_axes([0.77,.3,.2,.6])
ax2 =fig.add_axes([0.67,.5,.2,.3])
fig.add_axes([0.6,.1,.35,.3])
ax2.set_title("random axes")plt.tight_layout()
plt.show()

https://i.stack.imgur.com/HI6Mh.png

Alternatywny
>
Najłatwiejszym sposobem uzyskania jednego lub więcej zagnieżdżonych wykresów wraz z ich deskryptorami jest
plt.subplots()
http://matplotlib.org/api/pypl ... ts... Dla jednej z osi użyj
fig, ax = plt.subplots()

lub jeśli potrzeba więcej diagramów zagnieżdżonych,
fig, axes = plt.subplots(nrows=3, ncols=4)


Wstępne pytanie
>
W

oryginalne pytanie
https://coderoad.ru/43283643/
oś została ustawiona za pomocą
fig.add_axes ([0,0,1,1])
tak, aby ściśle przylegała do krawędzi figury. Wadą tego jest oczywiście to, że znaczniki, etykiety znaczników, etykiety osi i tytuły są przycinane. Dlatego zasugerowałem w jednym z komentarzy do odpowiedzi użycie
fig.add_subplot
, ponieważ automatycznie zapewni to wystarczającą ilość miejsca na te elementy, a jeśli to nie wystarczy, możesz dostosować za pomocą
pyplot. subplots_adjust (...)
lub
pyplot.tight_layout ()
.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się