在同一IPython Notebook单元中制作多个图表


88

我已经开始使用IPython Notebook

ipython notebook --pylab inline

这是我在一个单元格中的代码

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

这工作正常,它将绘制两条线,但在同一张图表上。

我想在单独的图表上绘制每条线。如果图表彼此相邻,而不是一个接一个,那就太好了。

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

Answers:


89

首先制作多个轴,然后将它们传递给Pandas plot函数,例如:

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

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

它仍然为您提供1个图形,但有两个不同的图形彼此相邻。


3
可以了 现在,我不会更改图像的大小。我可以用fig,axs = plt.subplots(1,2,figsize =(15,5))来做到这一点。有什么方法可以设置图像大小(以像素为单位)?
WebOrCode

1
实际上,使用figsize就是这样,那就是以英寸为单位的大小。多少像素取决于dpi,dpi是固定在屏幕上显示的。但是为了保存,可以通过添加dpi关键字来设置。
罗格·卡西斯

3
将dpi固定在屏幕上显示不是很准确(实际上是但不是)。IPython仅基于图像的像素大小来显示图像,而像素大小是在matplotlib中通过将以英寸为单位的图形大小乘以savefig.dpi配置来确定的。嵌入式图形使用与写入文件相同的savefig路径。
明斯克

感谢您指出这一点,我不知道它会那样工作。但是,如果同时考虑显示dpi,会不会更方便,因为在图形创建时很容易设置。对于savefig.dpi,我不知道其他方式mpl.rcParams['savefig.dpi'] = 120。对于dpi显示,很多地方都有一个关键字,例如plt.figure(dpi=120),但现在已被忽略,因此我对它的错误假设是固定的。
罗格·卡西斯

102

您还可以在每个绘图后调用show()函数。例如

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

1
很好,但是如何设置绘图图片的位置,例如(2,2)或(1,2)?
Pythoner 2016年

3
使用此选项时,图必然会一个接一个地出现。要对总体布局进行更多控制,pyplot.subplots()必须走的路。
Eric O Lebigot '17

1
我删除了链接。
Tooblippe

12

像这样:

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

11

换种方式,换个方式。尽管这没有其他方法那么灵活。不幸的是,这些图形是您在原始问题中确实要求的,而不是并排显示。但这非常简洁。

df.plot(subplots=True)

如果数据帧已经超过了两个系列,而您只需要绘制这两个,你就需要更换dfdf[['korisnika','osiguranika']]


2

我不知道这是否是新功能,但这将在单独的图上显示:

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

而这将绘制在同一图上:(就像op中的代码一样)

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

我找到了这个问题,因为我使用的是前一种方法,并且希望他们在同一图形上进行绘制,因此您的问题实际上是我的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.