matplot怎么在一个窗口上显示多个图像,并且动态显示

时间:2024-03-05 10:59:36

在我们的日常使用过程用,我们通常需要在一个窗口上面显示多个图像,那么怎么样才能这样显示呢?下面我们来介绍一下

一、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()函数来清除画布

让我们来看看效果咋样: