当前有效matplotlib版本为:3.4.1

pause函数概述

pause函数功能运行GUI事件循环若干秒。

pause函数的签名为matplotlib.pyplot.pause(interval)。参数interval表示秒数,类型为整数。

如果当前有活动的图形,在pause函数运行前,图形将会更新并显示,在等待期间事件循环会一直运行,直到暂停时间interval秒后结束。
如果没有当前有活动的图形,将会调用time.sleep函数,休眠interval秒。

pause函数原理

根据源码可知,pause函数会检测当前是否有活动的图形对象,如果有,则会检测figure.stale(它代表图形已发生变化,需要重绘),如果为True则会重绘图形,并采用非阻塞形式显示图形,然后运行事件循环interval秒。如果没有活动图形,直接运行time.sleep函数,休眠interval秒。

matplotlib.pyplot.pause()

def pause(interval):
    manager = _pylab_helpers.Gcf.get_active()
    if manager is not None:
        canvas = manager.canvas
        if canvas.figure.stale:
            canvas.draw_idle()
        show(block=False)
        canvas.start_event_loop(interval)
    else:
        time.sleep(interval)

案例:pause函数演示

通过对比可发现,使用pause函数时图形会间隔一段时间后更新,而使用time.sleep函数则不能正常显示。

使用pause函数

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(19680801)
data = np.random.random((50, 50, 50))

fig, ax = plt.subplots()

for i in range(len(data)):
    ax.cla()
    ax.imshow(data[i])
    ax.set_title("frame {}".format(i))
    plt.pause(0.1)

使用time.sleep函数

import matplotlib.pyplot as plt
import numpy as np
import time

np.random.seed(19680801)
data = np.random.random((50, 50, 50))

fig, ax = plt.subplots()

for i in range(len(data)):
    ax.cla()
    ax.imshow(data[i])
    ax.set_title("frame {}".format(i))
    # Note that using time.sleep does *not* work here!
    plt.draw()
    plt.show(block=False)
    time.sleep(0.01)
    
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐