Nazwy obiektów
Matplotlib jest silnie zorientowany obiektowo, a jego głównymi obiektami są figura i osie (nazwa axes
jest trochę myląca, ale prawdopodobnie to tylko ja).
Możesz myśleć o figurze jak o płótnie , którego zazwyczaj określasz wymiary i ewentualnie np. Kolor tła itp. Używasz płótna, figury , zasadniczo na dwa sposoby, umieszczając na niej inne obiekty (głównie osie , ale także etykiety tekstowe itp.) i zapisując jego zawartość z savefig
.
Można myśleć o osiach jako pewnego rodzaju szwajcarski scyzoryk, poręczny obiekt, który oferuje narzędzie (np .plot
, .scatter
, .hist
etc) do wszystkiego, głównie. Możesz umieścić jedną, dwie, ... wiele osi wewnątrz figury, używając jednej z wielu różnych metod.
plt
interfejs
PLT interfejs proceduralny został pierwotnie opracowany do naśladowania ™ interfejs MATLAB, ale nie jest tak naprawdę różni się od interfejsu obiektowego, nawet jeśli nie robią bezpośrednie odniesienie do głównych obiektów (tj figura i an osie ) obiekty te są tworzone automatycznie i każda metoda plt jest zasadniczo tłumaczona na wywołanie jednej z metod podstawowych obiektów podstawowych: np. a plt.plot()
jest a hidden_axes.plot
i a plt.savefig
jest a hidden_figure.savefig
.
W każdej chwili możesz mieć uchwyt na te ukryte obiekty za pomocą plt.gcf
i plt.gca
, co czasami jest konieczne, gdy jedna z metod obiektu nie została przeniesiona do metody w przestrzeni nazw plt .
Chciałbym dodać, że przestrzeń nazw plt zawiera również szereg wygodnych metod tworzenia instancji, na różne sposoby, figury i osi .
Twoje przykłady
1 sposób
plt.plot(x, y)
Tutaj używasz tylko interfejsu plt , możesz użyć tylko jednej osi na każdej figurze , ale właśnie tego chcesz, gdy eksplorujesz swoje dane, szybki przepis, który wykonuje pracę ...
2 sposób
ax = plt.subplot()
ax.plot(x, y)
Tutaj używasz wygodnej metody w przestrzeni nazw plt, aby nadać nazwę (i uchwyt) swojemu obiektowi axes , ale przy okazji jest też ukryta figura . Możesz później użyć obiektu axes do kreślenia, tworzenia histogramu itp. Wszystkich rzeczy, które możesz zrobić z interfejsem plt , ale możesz także uzyskać dostęp do wszystkich jego atrybutów i modyfikować je z większą swobodą.
3 sposób
figure = plt.figure()
new_plot = figure.add_subplot(111)
new_plot.plot(x, y)
Tutaj zaczynasz tworzenie instancji figury przy użyciu wygodnej metody w przestrzeni nazw plt, a później używasz tylko interfejsu obiektowego.
Możliwe jest ominięcie wygodnej metody plt ( matplotlib.figure.Figure
), ale musisz wtedy dostosować liczbę, aby uzyskać lepsze wrażenia z interakcji (w końcu jest to wygodna metoda).
Osobiste rekomendacje
Proponuję gołe plt.plot
, plt.scatter
w kontekście sesji interaktywnej, możliwie użycie IPythona z jego %matplotlib
magicznym poleceniem, a także w kontekście eksploracyjnego notatnika Jupyter.
Z drugiej strony podejście obiektowe plus kilka plt
wygodnych metod to droga do zrobienia
- jeśli masz stały problem do rozwiązania raz na zawsze dzięki dostosowanemu układowi precyzyjnie dostrojonych wątków pobocznych,
- jeśli chcesz osadzić Matplotlib w interfejsie użytkownika programu, który piszesz.
Między tymi skrajnościami jest duża szara strefa i jeśli zapytasz mnie, co mam zrobić, powiedziałbym po prostu „To zależy” ...