matplotlib动态刷新显示图像

使用matplotlib显示图像,并且能够在窗口内动态刷新(定时/按键)检视数据。

matplotlib动态刷新显示图像

1 定时刷新

1.1 代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import os
import time
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

image_root = "/data/image_dir/"

plt.ion() # matplotlib interactivate mode
for content in contents:
text = content.text
image_filename = content.image
print("%s\t\t%s" % (text, image_filename))

image = mpimg.imread(os.path.join(image_root, image_filename)) # read image from path
plt.imshow(image)
plt.title(text)
plt.pause(1) # pause 1 second
plt.clf() # clear the current figure

1.2 注意事项

1.2.1 plt.ion()函数

函数plt.ion()是动态刷新的关键,官方函数定义如下

1
2
3
4
def ion():
"""Turn the interactive mode on."""
matplotlib.interactive(True)
install_repl_displayhook()
  • ion函数说明为:Turn the interactivate mode on。

1.2.2 plt.clf()函数

另外,关于plt.clf()函数:

摘自【matplotlib 动态显示图片】的注意事项:

在动态显示图片的过程当中,发现随着显示图片数增加,画面变得越来越卡。这是因为内存没有释放,导致变卡。

所以加上plt.clf()这条语句之后能够及时清除figure。

2 按键刷新

2.1 代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import os
import time
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

image_root = "/data/image_dir/"

plt.ion() # matplotlib interactivate mode
for content in contents:
text = content.text
image_filename = content.image
print("%s\t\t%s" % (text, image_filename))

image = mpimg.imread(os.path.join(image_root, image_filename)) # read image from path
plt.imshow(image)
plt.title(text)
# plt.pause(0.1) # pause 0.1 second
input()
plt.clf() # clear the current figure

2.2 注意事项

2.2.1 input()函数

关于python的matplotlib库下实现按键后切换show图片

假如用plt.ion不会卡住,但一定要用plt.pause让窗口保留,然后用input等待键盘输入后才开始下一个循环

网上的做法如上摘录,一般会设置0.01秒pause停留。不过我发现注释掉,不做pause其实也是正常的,没发现什么影响。此处存疑。

input()函数接收按键输入,不输入的话,直接回车Enter结束即可,可实现按Enter键更新下一张图像及文本的效果。

3 仅显示

此处另附最基本的形式,即仅显示图文,无动态刷新,作参考。

3.1 代码示例

1
2
3
4
5
6
7
8
9
10
11
import os
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

image_root = "/data/image_dir/"

image_path = os.path.join(image_root, 'demo.jpg')
image = mpimg.imread(image_path)
plt.imshow(image)
plt.title("Image and text")
plt.show()

4 参考链接

查阅到的类似情形的相关博客如下:

关于python的matplotlib库下实现按键后切换show图片

【matplotlib 动态显示图片】

Python中matplotlib实时画图