我想绘制两个使用Matplotlib动画库的旋转椭圆,并且设法让它工作(或多或少)。问题是正在渲染的第一帧没有更新,所以当我在画布中获得两个旋转椭圆时,我也有椭圆在原始位置/方向。看看我的一段简单的代码:Matplotlib动画:使用blit时第一帧保留在画布中
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
from matplotlib import animation
fig = plt.figure()
ax = fig.add_subplot(111, aspect='equal')
e1 = Ellipse(xy=(0.5, 0.5), width=0.5, height=0.2, angle=60)
e2 = Ellipse(xy=(0.8, 0.8), width=0.5, height=0.2, angle=100)
def init():
ax.add_patch(e1)
ax.add_patch(e2)
return [e1,e2]
def animate(i):
e1.angle = e1.angle + 0.5
e2.angle = e2.angle + 0.5
return [e1,e2]
anim = animation.FuncAnimation(fig, animate, init_func=init, interval=1, blit=True)
plt.show()
任何想法如何解决这个问题?我当然可以关闭blit,但这会让它非常慢,所以这不是一个真正的选择。
谢谢!
编辑:最后的(工作)代码
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
from matplotlib import animation
fig = plt.figure()
ax = fig.add_subplot(111, aspect='equal')
e1 = Ellipse(xy=(0.5, 0.5), width=0.5, height=0.2, angle=60)
e2 = Ellipse(xy=(0.8, 0.8), width=0.5, height=0.2, angle=100)
ax.add_patch(e1)
ax.add_patch(e2)
def init():
e1.set_visible(False)
e2.set_visible(False)
return [e1,e2]
def animate(i):
if i == 1:
e1.set_visible(True)
e2.set_visible(True)
e1.angle = e1.angle + 0.5
e2.angle = e2.angle + 0.5
return [e1,e2]
anim = animation.FuncAnimation(fig, animate, init_func=init, interval=1, blit=True)
plt.show()
没有,没有工作,结果和以前一样。 – MPA
你确定吗?我复制了昨天发布的代码,并且在这里顺利运行。 (Matplotlib 1.2.1) –
是的,我复制粘贴你的代码,仍然像以前一样。我也在v1.2.1上。 – MPA