我无法弄清如何在使用blit的FuncAnimation图中实现动画标题。根据http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/和Python/Matplotlib - Quickly Updating Text on Axes,我已经构建了一个动画,但文本部分却无法进行动画处理。以下是简化的示例:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
vls = np.linspace(0,2*2*np.pi,100)
fig=plt.figure()
img, = plt.plot(np.sin(vls))
ax = plt.axes()
ax.set_xlim([0,2*2*np.pi])
#ttl = ax.set_title('',animated=True)
ttl = ax.text(.5, 1.005, '', transform = ax.transAxes)
def init():
ttl.set_text('')
img.set_data([0],[0])
return img, ttl
def func(n):
ttl.set_text(str(n))
img.set_data(vls,np.sin(vls+.02*n*2*np.pi))
return img, ttl
ani = animation.FuncAnimation(fig,func,init_func=init,frames=50,interval=30,blit=True)
plt.show()
如果移除blit=True
,文本会显示出来,但速度会明显减慢。当使用plt.title
、ax.set_title
和 ax.text
时似乎会出现问题。编辑:我找到了第一个链接中第二个示例为什么可以正常工作的原因;文字在
img
部分内。如果将上面的1.005
改成.99
,你就能看到我指的是什么了。可能有一种方法可以通过边界框实现这一点,不知道怎么实现...
FuncAnimation
调用中使用repeat=False
,然后等待动画完成并缩放到某个位置,绘图将会消失。 - Stanley Bak