Odpowiedź z las3rjock , która w jakiś sposób jest odpowiedzią zaakceptowaną przez OP, jest niepoprawna - kod nie działa, ani nie jest to poprawna składnia matplotlib; ta odpowiedź nie zawiera żadnego wykonywalnego kodu i nie zawiera żadnych informacji ani sugestii, które OP mógłby uznać za przydatne do napisania własnego kodu w celu rozwiązania problemu w PO.
Biorąc pod uwagę, że jest to przyjęta odpowiedź i otrzymała już kilka pozytywnych głosów, przypuszczam, że konieczna jest mała dekonstrukcja.
Po pierwsze, nazywając subplot ma nie daje wiele działek; subplot jest wywoływana w celu utworzenia pojedynczego działki, jak również utworzenia wielu działek. Ponadto „zmiana plt.figure (i)” nie jest poprawna.
plt.figure () (w którym plt lub PLT to zwykle biblioteka pyplot matplotlib zaimportowana i odbijana jako zmienna globalna, plt lub czasami PLT, na przykład:
from matplotlib import pyplot as PLT
fig = PLT.figure()
linia tuż powyżej tworzy instancję figury matplotlib; metoda add_subplot tego obiektu jest następnie wywoływana dla każdego okna kreślenia (nieformalnie pomyśl o osi x & y zawierającej pojedynczy wykres podrzędny ). Ty tworzysz (czy to tylko jedną, czy kilka na stronie), tak
fig.add_subplot(111)
ta składnia jest równoważna
fig.add_subplot(1,1,1)
wybierz ten, który ma dla Ciebie sens.
Poniżej wymieniłem kod do wykreślenia dwóch wykresów na stronie, jedna nad drugą. Formatowanie odbywa się za pośrednictwem argumentu przekazanego do add_subplot . Zauważ, że argumentem jest ( 211 ) dla pierwszego wykresu i ( 212 ) dla drugiego.
from matplotlib import pyplot as PLT
fig = PLT.figure()
ax1 = fig.add_subplot(211)
ax1.plot([(1, 2), (3, 4)], [(4, 3), (2, 3)])
ax2 = fig.add_subplot(212)
ax2.plot([(7, 2), (5, 3)], [(1, 6), (9, 5)])
PLT.show()
Każdy z tych dwóch argumentów stanowi pełną specyfikację prawidłowego umieszczenia odpowiednich okien wykresów na stronie.
211 (co znowu można zapisać w postaci trzech krotek, jako (2,1,1) oznacza dwa wiersze i jedną kolumnę okien wykresu; trzecia cyfra określa kolejność tego konkretnego okna wykresu cząstkowego względem innych okien wykresu cząstkowego - -w tym przypadku jest to pierwszy wykres (który umieszcza go w rzędzie 1), stąd wykres nr 1, wiersz 1, kolumna 1.
Argument przekazany do drugiego wywołania add_subplot różni się od pierwszego jedynie końcową cyfrą (2 zamiast 1, ponieważ ten wykres jest drugim wykresem (wiersz 2, kolumna 1).
Przykład z większą liczbą wykresów: jeśli zamiast tego chcesz mieć cztery wykresy na stronie, w konfiguracji macierzy 2x2, wywołałbyś metodę add_subplot cztery razy, przekazując te cztery argumenty (221), (222), (223) i ( 224), aby utworzyć cztery wykresy na stronie odpowiednio o godzinie 10, 2, 8 i 4 iw tej kolejności.
Zauważ, że każdy z czterech argumentów zawiera dwa wyprowadzenia 2 - które kodują konfigurację 2 x 2, tj. Dwa wiersze i dwie kolumny.
Trzecia (najbardziej po prawej) cyfra w każdym z czterech argumentów koduje kolejność tego konkretnego okna wykresu w macierzy 2 x 2 - tj. Wiersz 1 kol 1 (1), wiersz 1 kol 2 (2), wiersz 2 kol 1 (3), wiersz 2 kol. 2 (4).
fig.add_axes(rect)
zamiastadd_subplot
?PLT
? Nigdy wcześniej tego nie widziałemfor i in range(16): plt.subplot(4, 4, i+1)
i nie obserwując błędu składniowego. Odpowiedź została przyjęta, ponieważ prawdopodobnie zrobiła to, czego chciał PO.Ponieważ to pytanie jest sprzed 4 lat, wprowadzono nowe rzeczy, a wśród nich jest nowa funkcja,
plt.subplots
która jest bardzo wygodna :fig, axes = plot.subplots(nrows=2, ncols=3, sharex=True, sharey=True)
gdzie
axes
jest anumpy.ndarray
z obiektów AxesSubplot, dzięki czemu bardzo wygodnie jest przechodzić przez różne wykresy podrzędne, używając tylko indeksów tablicowych[i,j]
.źródło
Działa to również:
for i in range(19): plt.subplot(5,4,i+1)
Przedstawia łącznie 19 wykresów na jednej stronie. Format to 5 w dół i 4 w poprzek.
źródło
Odpowiedź @doug & FS. to bardzo dobre rozwiązania. Chcę udostępnić rozwiązanie do iteracji na pandas.dataframe.
import pandas as pd df=pd.DataFrame([[1, 2], [3, 4], [4, 3], [2, 3]]) fig = plt.figure(figsize=(14,8)) for i in df.columns: ax=plt.subplot(2,1,i+1) df[[i]].plot(ax=ax) print(i) plt.show()
źródło
for i,col in enumerate(df.columns):