Aynı IPython Notebook hücresinde birden fazla grafik oluşturun


88

IPython Defterime başladım

ipython notebook --pylab inline

Bu tek hücredeki kodum

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

Bu iyi çalışıyor, iki çizgi çizecek, ancak aynı grafik üzerinde.

Her çizgiyi ayrı bir grafik üzerine çizmek istiyorum. Ve grafikler birbiri ardına değil, yan yana olsaydı harika olurdu.

İkinci satırı bir sonraki hücreye koyabileceğimi biliyorum ve sonra iki tablo elde edeceğim. Ama grafiklerin birbirine yakın olmasını isterim çünkü aynı mantıksal birimi temsil ediyorlar.

Yanıtlar:


89

Önce birden fazla ekseni yapın ve bunları Pandas plot işlevine aktarın, örneğin:

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

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

Yine de size 1 rakam veriyor, ancak yan yana iki farklı grafik var.


3
Bu çalışıyor. Şimdi görüntünün boyutunu değiştirmeyeceğim. Bunu incir ile yapabilirim, axs = plt.subplots (1,2, figsize = (15, 5)). Görüntünün boyutunu piksel olarak ayarlamanın bir yolu var mı?
WebOrCode

1
İncir boyutunu kullanmak gerçekten de yoldur, inç cinsinden boyut. Kaç piksel olacağı, ekranda görüntülenmek üzere sabitlenen dpi'ye bağlıdır. Ancak kaydetmek için dpi anahtar sözcüğü eklenerek ayarlanabilir.
Rutger Kassies

3
Dpi'nin ekran üzeri gösterim için sabitlenmiş olması tam olarak doğru değildir (aslında öyle ve değildir). IPython, görüntüleri yalnızca piksel boyutlarına göre görüntüler ve bu piksel boyutu, matplotlib'de şekil boyutunu inç cinsinden savefig.dpiyapılandırma ile çarparak belirlenir . Satır içi rakamlar, dosyalar yazarken aynı kayıt yolunu kullanır.
minrk

Bunu belirttiğin için teşekkürler, böyle çalıştığını bilmiyordum. Yine de, ekran dpi'si hesaba katılırsa (aynı zamanda) daha uygun olmaz mıydı, çünkü şekil oluşturmada ayarlanması kolay. Savefig.dpi için bundan başka bir yol bilmiyorum mpl.rcParams['savefig.dpi'] = 120. Görüntü dpi'si için pek çok yerde bir anahtar sözcük vardır plt.figure(dpi=120), ancak bu şimdi görmezden gelinmiştir, dolayısıyla düzeltildiğine dair yanlış varsayımım.
Rutger Kassies

102

Her çizimden sonra show () işlevini de çağırabilirsiniz. Örneğin

   plt.plot(a)
   plt.show()
   plt.plot(b)
   plt.show()

1
Harika, ama (2,2) veya (1,2) gibi çizim resmi konumu nasıl ayarlanır?
Pythoner

3
Bu seçenekle arsalar mutlaka birbiri ardına görünür. Genel düzen üzerinde daha fazla kontrol pyplot.subplots()için gidilecek yol budur.
Eric O Lebigot

1
Bağlantıyı kaldırdım.
Tooblippe

12

Bunun gibi bir şey:

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

seabornPaketi çizim için kullanıyorsanız bunun da işe yarayacağını unutmayın :

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

Çeşitlilik için başka bir yol. Bu diğerlerinden biraz daha az esnek olmasına rağmen. Ne yazık ki, orijinal sorunuzda talep ettiğiniz grafikler yan yana değil, üst üste görünüyor. Ama çok özlü.

df.plot(subplots=True)

Dataframe fazla iki dizi birden vardır ve yalnızca bu ikisini çizmek istiyorsanız, değiştirmek gerekir dfile df[['korisnika','osiguranika']].


2

Bunun yeni bir işlevsellik olup olmadığını bilmiyorum, ancak bu, ayrı rakamlara göre çizilecek:

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

bu aynı şekle işaret ederken: (işlemdeki kod gibi)

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

Bu soruyu buldum çünkü eski yöntemi kullanıyordum ve onlardan aynı rakamı çizmelerini istiyordum, yani sorunuz aslında cevabımdı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.