Matplotlib - 定时器



在一般的计算机编程中,**定时器**指的是一种允许用户在预定义的时间间隔内安排特定任务或代码片段执行的机制。定时器在各种应用程序中都很有用,可以实现重复操作的自动化、定期更新或基于时间相关条件触发事件。

Matplotlib 中的定时器

Matplotlib 定时器是强大的功能,使您能够将周期性事件集成到绘图中。并且设计为独立于特定的图形用户界面 (GUI) 后端工作。

要利用 Matplotlib 定时器功能,**figure.canvas.new_timer()** 函数作为将定时器与各种 GUI 事件循环集成的关键组件。虽然它的调用签名可能看起来不寻常,但由于这种理解,调用签名至关重要(如果您的回调函数不接受参数或关键字参数,则需要显式指定空序列和字典)。

以下是语法:

语法

timer = figure.canvas.new_timer(interval=5000, callbacks=[(callback_function, [], {})])
timer.start()

此语法创建一个间隔为 5 秒的定时器,演示了定时器与 Matplotlib 绘图的集成。

示例

这是一个示例,它演示了在 Matplotlib 中使用定时器的简单用法。它设置了一个定时器,每 5 秒将“Matplotlib 定时器事件”打印到控制台。这展示了如何在绘图中使用定时器执行周期性任务。

import matplotlib.pyplot as plt

# Function to handle the timer event
def handle_timer_event():
   print('Matplotlib Timer Event')

# Create a new Matplotlib figure and axis
custom_fig, custom_ax = plt.subplots(figsize=(7, 4))

# Create a timer with a 5000 milliseconds interval
custom_timer = custom_fig.canvas.new_timer(interval=5000, callbacks=[(handle_timer_event, [], {})])

# Start the timer
custom_timer.start()
plt.show()

输出

执行上述程序后,您将获得以下输出:

timers_ex1
Matplotlib Timer Event
Matplotlib Timer Event
Matplotlib Timer Event
Matplotlib Timer Event
Matplotlib Timer Event
Matplotlib Timer Event

观看下面的视频以观察此示例的工作原理。

timers_ex1 gif

用于实时更新的定时器

定时器可用于在绘图中实现实时更新,增强可视化的动态特性。

示例

在示例中,定时器用于以 500 毫秒的间隔更新图形的标题,其中包含当前时间戳。这表明,如何在可视化中使用定时器进行动态、时间敏感的更新。

from datetime import datetime
import matplotlib.pyplot as plt
import numpy as np

# Function to update the title with the current timestamp
def update_title(axes):
   axes.set_title(datetime.now())
   axes.figure.canvas.draw()

# Create a Matplotlib figure and axis
fig, ax = plt.subplots(figsize=(7, 4))

# Generate sample data
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x))

# Create a new timer with an interval of 500 milliseconds
timer = fig.canvas.new_timer(interval=500)

# Add the update_title function as a callback to the timer
timer.add_callback(update_title, ax)

# Start the timer
timer.start()
plt.show()

输出

执行上述程序后,您将获得以下输出:

timers_ex2

观看下面的视频以观察此示例的工作原理。

timers_ex2 gif

带定时器的动画布朗运动

在更高级的场景中,我们利用定时器的优势来动画化一个二维布朗运动,创建一个随着时间推移而生成的视觉动态绘图。

示例

此示例演示了定时器在创建动画可视化中的应用。

import numpy as np
import matplotlib.pyplot as plt

# Callback function for the timer to update line data
def update_line_data(line, x_data, y_data):
   x_data.append(x_data[-1] + np.random.normal(0, 1))
   y_data.append(y_data[-1] + np.random.normal(0, 1))
   line.set_data(x_data, y_data)
   line.axes.relim()
   line.axes.autoscale_view()
   line.axes.figure.canvas.draw()
# Initial data points
x_coords, y_coords = [np.random.normal(0, 1)], [np.random.normal(0, 1)]

# Create a Matplotlib figure and axis
fig, ax = plt.subplots(figsize=(7, 4))
line, = ax.plot(x_coords, y_coords, color='aqua', marker='o')

# Create a new timer with a 100-millisecond interval
animation_timer = fig.canvas.new_timer(interval=1000, callbacks=[(update_line_data, [line, x_coords, y_coords], {})])
animation_timer.start()

# Display the animated plot
plt.show()

输出

执行上述程序后,您将获得一个带有动画的图形:

timers_ex3

观看下面的视频以观察此示例的工作原理。

timers_ex3 gif
广告