Matplotlib 动画中的停止/开始/暂停

Matplotlib 动画中的停止/开始/暂停

Matplotlib是一个基于Python的可视化库,用于创建各种类型的图形,包括线图、散点图、柱状图、等高线图和3D图形等。Matplotlib中的一个有用的特性是动画,可以帮助用户在图表中创建可移动的图形、时序变化的图形以及具有视觉效果的图形等。在本文中,我们将探讨如何使用Matplotlib的动画功能来实现停止、开始和暂停功能。

阅读更多:Matplotlib 教程

Matplotlib动画简介

Matplotlib的动画模块可以帮助用户实现基于时间展示数据的功能。首先,我们需要导入相关的包。

import matplotlib.pyplot as plt
import matplotlib.animation as animation
Python

接下来,我们将为图形添加数据。对于此示例,我们将创建一个二维列表,其中包含5个列表。每个子列表包含10个随机整数。

import random

data = []
for i in range(5):
  data.append([random.randint(1, 10) for j in range(10)])
Python

现在,我们将使用Matplotlib的plot函数,创建一个简单的线形图。

fig, ax = plt.subplots()
line, = ax.plot(data[0])
Python

接下来,我们将创建一个函数,用于更新线形图的数据。此函数将在动画播放期间多次调用。

def update(num):
  line.set_ydata(data[num])
  return line,
Python

现在,我们将使用Matplotlib的FuncAnimation函数,并指定我们的更新函数和帧数。

ani = animation.FuncAnimation(fig, update, frames=range(5), interval=1000)
plt.show()
Python

如果一切正常,您应该可以看到一个简单的线形图,该图每隔1秒钟更新一次,并显示来自数据中的1到10个随机值。

停止/开始动画

在上面的示例中,动画是通过调用plt.show()函数启动的。Matplotlib的动画模块输出一个动画对象,使得我们能够在任何时候停止、开始或继续动画。这些功能可以通过添加如下代码来实现。

def stop_animation(event):
  ani.event_source.stop()

def start_animation(event):
  ani.event_source.start()
Python

在停止动画时,我们使用event_source.stop()方法,而在开始时,则使用event_source.start()方法。此代码使用matplotlib的事件功能,因此您还需要导入以下包。

from matplotlib.widgets import Button
Python

现在,我们要定义一个按钮并将其添加到当前axis中。这里,我们创建了两个不同的按钮,分别用于停止和开始动画。

stop = Button(ax_stop, 'Stop', color='red')
start = Button(ax_start, 'Start', color='green')

stop.on_clicked(stop_animation)
start.on_clicked(start_animation)
Python

暂停动画

此外,您还可以添加一个暂停功能。这个步骤涉及到用一个按键实现开始和暂停的功能,并控制图像更新的逻辑。下面是实现这个功能的代码。

do_animation = True

def on_click(event):
  global do_animation
  do_animation ^= True

  if do_animation:
    ani.event_source.start()
  else:
    ani.event_source.stop()

button = Button(ax_pause, 'Pause', color='gray')
button.on_clicked(on_click)

# define the animation function
def ani_func(i):
  if do_animation:
    update(i)

  return line

# create the animation
ani = animation.FuncAnimation(fig, ani_func, frames=range(5), interval=1000)

# show the plot
plt.show()
Python

在此示例中,我们创建了一个名为“do_animation”的全局变量,并将其设置为“True”。然后,我们创建了一个名为“on_click”的函数,并定义了一个参数“event”。该函数中有一组逻辑,用于在单击按钮时切换“do_animation”的值。如果“do_animation”为“True”,则需调用“ani.event_source.start()”以恢复动画;如果“do_animation”为“False”,则需调用“ani.event_source.stop()”以暂停动画。然后,我们创建了一个名为“button”的按钮,并指定其颜色和单击事件。在定义函数“ani_func”时,我们添加了一组条件判断,用于检查“do_animation”是否为“True”。只有当“do_animation”为“True”时,才对图像进行更新,并返回更新后的线对象。最后,我们使用“animation.FuncAnimation”函数创建了一个动画对象,并将其指定为“ani”,以使其能够在任何时候被操作。最终,我们调用“plt.show()”函数显示图形。

总结

在本文中,我们介绍了如何在Matplotlib动画中实现停止、开始和暂停功能。具体而言,我们使用了Matplotlib的动画模块创建了一个简单的线形图,并使用三个不同的按钮控制其播放状态。我们还演示了如何使用全局变量和条件语句来切换动画的状态,以实现暂停和继续功能。这些技术不仅可以应用于图形的创建,还可以用于其他需要动态显示数据的场景,例如模拟等。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册