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ą.

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.


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()

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()

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']].


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ą.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.