我正在尝试通过animation.FuncAnimation()
使用Python和Matplotlib显示基本动画。动画非重复,由固定(和预定义)数量的帧组成,帧之间间隔一定的固定间隔。它只能运行一次。
动画运行得很好,但是由于调用是plt.show()
,因此该图形不会自动关闭。
我知道可以通过编写plt.show()
来使方法plt.show(block=False)
成为非阻塞调用,但这不能完全解决我的问题。我无法在StackOverflow和其他站点上获得任何有关该库如何处置此事件信息的信息,以便允许我致电plt.close()
。 / p>
我正在寻找一种实现此目标的Python方式,而不是我目前的解决方案,这远非好事。这是我的“解决方案”:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
# Animation settings
def animate(frame):
grid_size = [10, 10]
print('frame: {}'.format(frame)) # Debug: May be useful to stop
grid = np.random.randint(low=0, high=256, size=grid_size, dtype=np.uint8)
ax.clear()
ax.imshow(grid, cmap='gray', vmin=0, vmax=255) # Is the range [0, 255] or [0, 255)?
INTERVAL = 100
FRAMES_NUM = 10
anim = animation.FuncAnimation(fig, animate, interval=INTERVAL, frames=FRAMES_NUM, repeat=False)
plt.show(block=False)
plt.pause(float(FRAMES_NUM*INTERVAL)/1000) # Not pythonic
plt.close(fig)
答案 0 :(得分:2)
也许您想使用动画功能来决定何时关闭图形。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
grid_size = [10, 10]
grid = np.random.randint(low=0, high=256, size=grid_size, dtype=np.uint8)
im = ax.imshow(grid, cmap='gray', vmin=0, vmax=255)
# Animation settings
def animate(frame):
if frame == FRAMES_NUM:
print(f'{frame} == {FRAMES_NUM}; closing!')
plt.close(fig)
else:
print(f'frame: {frame}') # Debug: May be useful to stop
grid = np.random.randint(low=0, high=256, size=grid_size, dtype=np.uint8)
im.set_array(grid)
INTERVAL = 100
FRAMES_NUM = 10
anim = animation.FuncAnimation(fig, animate, interval=INTERVAL,
frames=FRAMES_NUM+1, repeat=False)
plt.show()
答案 1 :(得分:0)
在你的动画函数中使用 plt.close()
例如,如果您绘制的最后一帧是 iFrame = 9
然后:
if iFrame == 9:
plt.close()