gpt4 book ai didi

Python matplotlib 动画重复

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:09 25 4
gpt4 key购买 nike

我使用 matplotlib.animation 和 FuncAnimation 制作了一个动画。我知道我可以将 repeat 设置为 True/False 来重播动画,但是还有一种方法可以在 FuncAnimation 返回后重播动画吗?

anim = FuncAnimation(fig, update, frames= range(0,nr_samples_for_display), blit=USE_BLITTING, interval=5,repeat=False)

plt.show()
playvideo = messagebox.askyesno("What to do next?", "Play Video again?")

我可以使用 anim 对象重播动画或执行另一个 plt.show() 吗?

预先感谢您的回答亲切的问候,杰拉德

最佳答案

图形显示一次后,无法使用 plt.show() 再次显示。

一个选项是重新创建图形以再次显示该新图形。

createfig():
fig = ...
# plot something
def update(i):
#animate
anim = FuncAnimation(fig, update, ...)

createfig()
plt.show()

while messagebox.askyesno(..):
createfig()
plt.show()

重启动画的更好选择可能是将用户对话框集成到 GUI 中。这意味着在动画结束时,您会询问用户是否要重播动画,而无需先实际关闭 matplotlib 窗口。要将动画重置为开始,您可以使用

ani.frame_seq = ani.new_frame_seq() 

例子:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
import Tkinter
import tkMessageBox

y = np.cumsum(np.random.normal(size=18))
x = np.arange(len(y))

fig, ax=plt.subplots()

line, = ax.plot([],[], color="crimson")

def update(i):
line.set_data(x[:i],y[:i])
ax.set_title("Frame {}".format(i))
ax.relim()
ax.autoscale_view()
if i == len(x)-1:
restart()

ani = animation.FuncAnimation(fig,update, frames=len(x), repeat=False)

def restart():
root = Tkinter.Tk()
root.withdraw()
result = tkMessageBox.askyesno("Restart", "Do you want to restart animation?")
if result:
ani.frame_seq = ani.new_frame_seq()
ani.event_source.start()
else:
plt.close()

plt.show()

关于Python matplotlib 动画重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44719106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com