为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Python 和 Matplotlib 为多边形(由数组定义)设置动画

如何使用 Python 和 Matplotlib 为多边形(由数组定义)设置动画

Smart猫小萌 2021-07-30 16:55:55
问题解释: 我想为从数组接收的值设置动画多边形(在我的简单示例中,它是一个移动的正方形)。我想保持多边形的 x 和 y 值可变。不要担心多边形做了什么运动。这只是一个例子。需要使用“set_xy()”,就像在“使用 matplotlib的动画转换多边形”的解决方案中一样。目标-> 在每个动画帧中,我想从数组 (P1x,P1y,P2x,P2y,...) 加载多边形值并更新图形。问题: 在我的代码中,我仍然有使用补丁的问题。我正在尝试使用索引 i 更新多边形值。我必须如何定义补丁?这是否必须在动画调用之前完成?import matplotlib.pyplot as pltimport numpy as npimport matplotlib.animation as animationimport matplotlib.patches as patchesfig = plt.figure()ax = fig.add_subplot(111)ax.set_xlim(-10,10)ax.set_ylim(-10,10)P1x=[0.0,0.5,1.0,1.5,2.0,2.5,3.0]P1y=[0.0,0.0,0.0,0.0,0.0,0.0,0.0]P2x=[1.0,1.5,2.0,2.5,3.0,3.5,4.0]P2y=[0.0,0.0,0.0,0.0,0.0,0.0,0.0]P3x=[1.0,1.5,2.0,2.5,3.0,3.5,4.0]P3y=[1.0,1.0,1.0,1.0,1.0,1.0,1.0]P4x=[0.0,0.5,1.0,1.5,2.0,2.5,3.0]P4y=[1.0,1.0,1.0,1.0,1.0,1.0,1.0]def init():    return patch,def animate(i):    v = np.array([                [P1x[i],  P1y[i]],                  [P2x[i],  P2y[i]],                  [P3x[i],  P3y[i]],                [P4x[i],  P4y[i]]                ])    patch=patches.Polygon(v,closed=True, fc='r', ec='r')    return patch,ani = animation.FuncAnimation(fig, animate, np.arange(1, 5), init_func=init,                              interval=1000, blit=True)plt.show()非常感谢你的帮助!
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

是的,您需要先创建多边形并将其添加到轴上。在动画函数中,您可以使用补丁的patch.set_xy()方法来更新多边形的顶点。


import matplotlib.pyplot as plt

import numpy as np

import matplotlib.animation as animation

import matplotlib.patches as patches


fig = plt.figure()

ax = fig.add_subplot(111)

ax.set_xlim(-10,10)

ax.set_ylim(-10,10)


P1x=[0.0,0.5,1.0,1.5,2.0,2.5,3.0]

P1y=[0.0,0.0,0.0,0.0,0.0,0.0,0.0]

P2x=[1.0,1.5,2.0,2.5,3.0,3.5,4.0]

P2y=[0.0,0.0,0.0,0.0,0.0,0.0,0.0]

P3x=[1.0,1.5,2.0,2.5,3.0,3.5,4.0]

P3y=[1.0,1.0,1.0,1.0,1.0,1.0,1.0]

P4x=[0.0,0.5,1.0,1.5,2.0,2.5,3.0]

P4y=[1.0,1.0,1.0,1.0,1.0,1.0,1.0]


P = np.concatenate((np.array([P1x, P2x, P3x, P4x]).reshape(4,1,len(P1x)),

                    np.array([P1y, P2y, P3y, P4y]).reshape(4,1,len(P1x))), axis=1)


patch = patches.Polygon(P[:,:,0],closed=True, fc='r', ec='r')

ax.add_patch(patch)


def init():

    return patch,


def animate(i):

    patch.set_xy(P[:,:,i])

    return patch,


ani = animation.FuncAnimation(fig, animate, np.arange(P.shape[2]), init_func=init,

                              interval=1000, blit=True)

plt.show()



查看完整回答
反对 回复 2021-08-03
  • 1 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号