Utwórz więcej niż jeden wykres w tej samej komórce Notatnik IPython

88

Zacząłem mój notatnik IPython z

ipython notebook --pylab inline

To jest mój kod w jednej komórce

df['korisnika'].plot()
df['osiguranika'].plot()

To działa dobrze, narysuje dwie linie, ale na tym samym wykresie.

Chciałbym narysować każdą linię na osobnym wykresie. Byłoby wspaniale, gdyby wykresy były obok siebie, a nie jedna po drugiej.

Wiem, że mogę umieścić drugą linię w następnej komórce, a wtedy otrzymam dwa wykresy. Ale chciałbym, żeby wykresy były blisko siebie, ponieważ reprezentują tę samą jednostkę logiczną.

WebOrCode
źródło

Odpowiedzi:

89

Najpierw wykonaj wiele osi i przekaż je do funkcji wykresu Pandy, na przykład:

fig, axs = plt.subplots(1,2)

df['korisnika'].plot(ax=axs[0])
df['osiguranika'].plot(ax=axs[1])

Nadal daje 1 figurę, ale z dwoma różnymi polami obok siebie.

Rutger Kassies
źródło
3
To działa. Teraz nie chcę zmieniać rozmiaru obrazu. Mogę to zrobić za pomocą fig, axs = plt.subplots (1,2, figsize = (15, 5)). Czy istnieje sposób na ustawienie rozmiaru obrazu w pikselach?
WebOrCode
1
Używanie figsize jest rzeczywiście sposobem, to jest rozmiar w calach. Ile pikseli to będzie, zależy od dpi, która jest ustalona dla wyświetlania na ekranie. Jednak zapisywanie można ustawić, dodając słowo kluczowe dpi.
Rutger Kassies
3
Nie jest do końca dokładne to, że rozdzielczość dpi jest ustalona dla wyświetlania na ekranie (cóż, i nie jest). IPython wyświetla obrazy wyłącznie na podstawie ich rozmiaru w pikselach, a rozmiar tego piksela jest określany w matplotlib przez pomnożenie rozmiaru figury w calach przez savefig.dpikonfigurację. Rysunki w wierszu używają tej samej ścieżki zapisu, co zapisywanie plików.
minrk
Dzięki za zwrócenie uwagi, nie wiedziałem, że to działa. Czy nie byłoby wygodniej, gdyby wzięto pod uwagę rozdzielczość ekranu (również), ponieważ łatwo to ustawić przy tworzeniu figury. W przypadku savefig.dpi nie znam innego sposobu niż mpl.rcParams['savefig.dpi'] = 120. W przypadku dpi wyświetlania w wielu miejscach jest słowo kluczowe, takie jak plt.figure(dpi=120), ale teraz jest ono ignorowane, stąd moje błędne założenie, że zostało to naprawione.
Rutger Kassies
102

Możesz także wywołać funkcję show () po każdym wykresie. na przykład

   plt.plot(a)
   plt.show()
   plt.plot(b)
   plt.show()
Tooblippe
źródło
1
Świetnie, ale jak ustawić lokalizację obrazu działki, na przykład (2,2) lub (1,2)?
Pythoner
3
Dzięki tej opcji działki muszą koniecznie pojawiać się jeden po drugim. Aby uzyskać większą kontrolę nad ogólnym układem, pyplot.subplots()jest droga.
Eric O Lebigot
1
Usunąłem link.
Tooblippe
13

Coś takiego:

import matplotlib.pyplot as plt
... code for plot 1 ...
plt.show()
... code for plot 2...
plt.show()

Zwróć uwagę, że zadziała to również, jeśli używasz seabornpakietu do drukowania:

import matplotlib.pyplot as plt
import seaborn as sns
sns.barplot(... code for plot 1 ...) # plot 1
plt.show()
sns.barplot(... code for plot 2 ...) # plot 2
plt.show()
mgoldwasser
źródło
11

Inny sposób na różnorodność. Chociaż jest to nieco mniej elastyczne niż inne. Niestety, wykresy pojawiają się jeden nad drugim, a nie obok siebie, o co prosiłeś w swoim pierwotnym pytaniu. Ale jest bardzo zwięzły.

df.plot(subplots=True)

Jeśli dataframe ma więcej niż dwóch serii, a chcesz tylko wykreślić te dwa, trzeba wymienić dfz df[['korisnika','osiguranika']].

Luciano
źródło
2

Nie wiem, czy to nowa funkcjonalność, ale to wykreśli na osobnych liczbach:

df.plot(y='korisnika')
df.plot(y='osiguranika')

podczas gdy to wykreuje na tej samej figurze: (tak jak kod w op)

df.plot(y=['korisnika','osiguranika'])

Znalazłem to pytanie, ponieważ użyłem poprzedniej metody i chciałem, aby narysowali tę samą liczbę, więc twoje pytanie było właściwie moją odpowiedzią.

Steven
źródło