Matplotlib 动画多边形
我正在使用matplotlib这个库,想要用动画功能让一个多边形在平面上旋转。
下面的代码只画出了第一个多边形,但动画没有效果。
有没有人能帮我找出animate
函数中有什么问题吗?
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
from matplotlib.patches import Polygon
fig = plt.figure()
fig.set_dpi(100)
fig.set_size_inches(7, 6.5)
ax = plt.axes(xlim=(-30, 30), ylim=(-30, 30))
pts = [[0.,0.], [2.,0.], [9.6,7.6], [9.6,9.6]]
patch = plt.Polygon(pts,closed=None, fill=None, edgecolor='r')
def init():
patch.pts = [[0.,0.], [2.,0.], [9.6,7.6], [9.6,9.6]]
ax.add_patch(patch)
return patch,
def animate(i):
x1=0.+ 10. * np.sin(np.radians(i))
x2=2.+ 10. * np.sin(np.radians(i))
x3=9.6+ 10. * np.sin(np.radians(i))
x4=9.6+ 10. * np.sin(np.radians(i))
y1=0.+ 10. * np.cos(np.radians(i))
y2=0.+ 10. * np.cos(np.radians(i))
y3=7.6+ 10. * np.cos(np.radians(i))
y4=9.6+ 10. * np.cos(np.radians(i))
patch.pts = [[x1,y1], [x2,y2], [x3,y3], [x4,y4]]
return patch,
anim = animation.FuncAnimation(fig,animate,init_func=init,frames=36,interval=1000,blit=True)
plt.show()
1 个回答
2
这一行:
patch.pts = [[x1,y1], [x2,y2], [x3,y3], [x4,y4]]
并没有更新多边形的顶点。你可以使用 set_xy 来改变顶点:
patch.set_xy([[x1,y1], [x2,y2], [x3,y3], [x4,y4]])
这样每次循环时图形都会发生变化。有关更多信息,可以查看 Matplotlib 的艺术家文档。
不过,看起来形状并没有旋转。这和你使用的坐标有关。