在我们的日常使用过程用,我们通常需要在一个窗口上面显示多个图像,那么怎么样才能这样显示呢?下面我们来介绍一下
一、plot.figure()函数
函数的原型如下:
1 figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
其中num:图像编号或名称,数字为编号 ,字符串为名称。figsize:指定figure的宽和高,单位为英寸。dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80。
二、plot.subplot()函数
1 subplot(nrows,ncols,index,**fig_kw)
其中nrows就是行数。ncols是列数。index索引号就是画第几张图。
比如subplot(1,2,1),就是在figure中水平画两个图片。
三、plot.figure()和plot.subplot()有什么关系
figure就相当于创建一个画布,subplot就相当于在这个画布上圈一块区域只让自己用,然后自己只在这个区域内作画。就像下图:
四、plot.figure()和plot.subplot()简单举例
下面直接是程序,大家可以看下效果。
1 import matplotlib.pyplot as plt 2 import matplotlib.image as rimg 3 import numpy as np 4 num = np.random.rand(10) 5 img = rimg.imread("大熊猫.png") 6 plt.figure() 7 plt.subplot(2,2,1) 8 plt.imshow(img) 9 plt.subplot(2,2,2) 10 plt.bar(range(10),num) 11 plt.subplot(2,2,4) 12 plt.imshow(img) 13 plt.show()
显示效果如下:
现在我们多个图像显示完成了,那么我想让这个窗口不关闭,刷新一下画布,显示刷新后的图像咋办啊?接下来我们就来解决这个问题
下面我们直接上代码在讲解。
1 import matplotlib.pyplot as plt 2 import matplotlib.image as rimg 3 import numpy as np 4 #打开交互模式 5 plt.ion() 6 num = np.random.rand(10) 7 img = rimg.imread("大熊猫.png") 8 for i in range(200): 9 #plt.figure() #不能加这个,因为这个会创建一个新的画布 10 plt.subplot(2,2,1) 11 plt.imshow(img) 12 print(i) 13 if (i%2 == 0): 14 plt.subplot(2,2,2) 15 else: 16 plt.subplot(2,2,3) 17 plt.bar(range(10),num) 18 plt.subplot(2,2,4) 19 plt.imshow(img) 20 #停顿时间 21 plt.pause(0.1) 22 #清除当前画布 23 plt.clf() 24 plt.ioff()
现在我们来分析一下代码,把主要的讲解一下。
1、为什么不能加figure()?
因为加上这个函数就会新建一个画布,打开一个新的窗口,这样图像就没法在一个窗口上显示了,这是我们不希望的结果
2、为什么没有了plt.show()函数,画布是怎么更新的?
因为运行到plt.pause()这个函数时,如果当前有活动的画布,那个这个函数会先执行画布的更新和显示,所以就不用了show函数来显示了。
3、怎么清除画布上的内容的?
调用plt.clf()函数来清除画布
让我们来看看效果咋样: