Buat lebih dari satu grafik dalam sel Notebook IPython yang sama

88

Saya telah memulai Notebook IPython saya dengan

ipython notebook --pylab inline

Ini adalah kode saya dalam satu sel

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

Ini berfungsi dengan baik, ini akan menarik dua garis, tetapi pada bagan yang sama.

Saya ingin menggambar setiap garis pada bagan terpisah. Dan akan sangat bagus jika grafiknya bersebelahan, bukan satu demi satu.

Saya tahu bahwa saya bisa meletakkan baris kedua di sel berikutnya, dan kemudian saya akan mendapatkan dua grafik. Tapi saya ingin grafik dekat satu sama lain, karena mereka mewakili unit logis yang sama.

WebOrCode
sumber

Jawaban:

89

Buat sumbu ganda terlebih dahulu dan teruskan ke fungsi plot Pandas, seperti:

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

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

Ini masih memberi Anda 1 gambar, tetapi dengan dua plot berbeda di samping satu sama lain.

Rutger Kassies
sumber
3
Ini bekerja. Sekarang saya tidak akan mengubah ukuran gambar. Saya dapat melakukannya dengan ara, axs = plt.subplots (1,2, figsize = (15, 5)). Adakah cara untuk mengatur ukuran gambar dalam piksel?
WebOrCode
1
Menggunakan figsize memang caranya, yaitu ukurannya dalam inchi. Berapa banyak piksel yang akan tergantung pada dpi, yang ditetapkan untuk ditampilkan di layar. Namun untuk menyimpannya bisa diatur dengan menambahkan kata kunci dpi.
Rutger Kassies
3
Tidak cukup akurat bahwa dpi ditetapkan untuk tampilan di layar (baik itu dan tidak). IPython menampilkan gambar murni berdasarkan ukuran pikselnya, dan ukuran piksel tersebut ditentukan di matplotlib dengan mengalikan ukuran gambar dalam inci dengan savefig.dpikonfigurasi. Gambar sebaris menggunakan jalur savefig yang sama seperti menulis file.
minrk
Terima kasih telah menunjukkannya, saya tidak tahu itu berfungsi seperti itu. Bukankah akan lebih nyaman meskipun jika tampilan dpi diperhitungkan (juga), karena itu mudah diatur pada pembuatan gambar. Untuk savefig.dpi saya tidak tahu cara lain selain mpl.rcParams['savefig.dpi'] = 120. Untuk tampilan dpi ada kata kunci di banyak tempat, seperti plt.figure(dpi=120), tapi itu diabaikan sekarang, oleh karena itu asumsi saya salah tentang itu diperbaiki.
Rutger Kassies
102

Anda juga dapat memanggil fungsi show () setelah setiap plot. misalnya

   plt.plot(a)
   plt.show()
   plt.plot(b)
   plt.show()
Tooblippe
sumber
1
Hebat, tapi bagaimana cara mengatur lokasi gambar plot, seperti (2,2) atau (1,2)?
Pythoner
3
Dengan opsi ini, plot selalu muncul satu demi satu. Untuk lebih mengontrol tata letak keseluruhan, pyplot.subplots()adalah cara untuk pergi.
Eric O Lebigot
1
Saya menghapus tautan tersebut.
Tooblippe
12

Sesuatu seperti ini:

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

Perhatikan bahwa ini juga akan berfungsi jika Anda menggunakan seabornpaket untuk merencanakan:

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.dll
sumber
11

Cara lain, untuk variasi. Meski ini agak kurang fleksibel dibanding yang lain. Sayangnya, grafik muncul satu di atas yang lain, bukan berdampingan, yang memang Anda minta dalam pertanyaan awal Anda. Tapi ini sangat singkat.

df.plot(subplots=True)

Jika kerangka data memiliki lebih dari dua rangkaian, dan Anda hanya ingin memplot keduanya, Anda harus menggantinya dfdengan df[['korisnika','osiguranika']].

Luciano
sumber
2

Saya tidak tahu apakah ini fungsionalitas baru, tetapi ini akan plot pada gambar terpisah:

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

sementara ini akan plot pada gambar yang sama: (seperti kode di op)

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

Saya menemukan pertanyaan ini karena saya menggunakan metode sebelumnya dan ingin mereka merencanakan pada gambar yang sama, jadi pertanyaan Anda sebenarnya adalah jawaban saya.

steven
sumber