2013-05-06 69 views
53

我开始我的IPython的笔记本采用制作多图中相同IPython的笔记本电池

ipython notebook --pylab inline 

这是我在一个单元代码

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

这工作正常,就会得出两个线,但在同一张图上。

我想画一个单独的图表上的每一行。 如果图表彼此相邻,而不是一个接一个,那将会很棒。

我知道我可以把第二行放在下一个单元格中,然后我会得到两个图表。但我希望这些图表彼此接近,因为它们表示相同的逻辑单元。

回答

56

首先使多个轴,并将它们传递给熊猫绘图功能,如:

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

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

它仍然给你1个的数字,但有两个不同的地块彼此旁边。

+2

这是工作。现在我不想改变图像的大小。我可以用fig,axs = plt.subplots(1,2,figsize =(15,5))来完成。有没有什么方法来设置像素的大小? – WebOrCode 2013-05-06 07:31:25

+0

使用figsize确实是一种方式,即以英寸为单位的尺寸。将有多少像素取决于dpi,它固定用于在屏幕上显示。但为了保存,可以通过添加dpi关键字来设置。 – 2013-05-06 07:44:17

+2

对于屏幕显示来说,dpi是固定的并不是很准确(它是*而不是*)。 IPython完全基于像素大小显示图像,并且像素大小由matplotlib中的“savefig.dpi”配置乘以英寸数字大小确定。内联数字使用与编写文件相同的savefig路径。 – minrk 2013-05-06 18:36:22

54

您也可以在每个绘图之后调用show()函数。 e.g

plot(a) 
    show() 
    plot(b) 
    show() 

见例如在 - http://nbviewer.ipython.org/6151560

+1

很好,但是如何设置情节图片的位置,如(2,2)或(1,2)? – Pythoner 2016-04-08 15:07:05

+0

使用此选项,图必须一个接一个出现。为了更好地控制整体布局,'pyplot.subplots()'是要走的路。 – EOL 2017-10-01 19:55:36

5

的另一种方式,对品种。虽然这比其他人稍微灵活一些。不幸的是,这些图形显示为一个在另一个之上,而不是并排显示,这是您在原始问题中所要求的。但它非常简洁。

df.plot(subplots=True) 

如果数据框具有比两大系列,而您只需要绘制这两个,你需要用df[['korisnika','osiguranika']]更换df

1

我不知道这是否是新的功能,但是这将绘制在不同的数字:

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

,而这将在同一图形绘制:(就像在OP代码)

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

我发现这个问题,因为我使用的是前一种方法,并希望他们在同一个图上绘图,所以你的问题实际上是我的答案。

1

事情是这样的:

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

注意,这也会,如果你使用的是seaborn包绘制工作:

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