使用matplotlib绘制移动多边形

时间:2015-05-28 23:35:14

标签: python matplotlib plot

我有很多多边形,其顶点每次模拟都会移动,在计算完所有新多边形后,必须将它们绘制成matplotlib图。

当代码是静态的时候,我使用路径和补丁来绘制多边形,比如

for polygon in P:
    path = Path(polygon)
    patch = patches.PathPatch(path, facecolor='none', lw=1)
    ax.add_patch(patch)

但当然,在更新多边形时执行此操作会导致绘制最后一个多边形,并且它不是一个干净的更新。多边形的格式是一个带有numpy数组的列表,每个都是多边形的顶点,如[[0.1223, 0.234], [0.123,0.4323], [0.2133, 0.5433]]

我可以绘制没有points = ax.plot(vertices[:,0], vertices[:,1], '.')[0]行的顶点,并使用points.set_data(...)更新它们,然后绘制画布。我没有使用FuncAnimation,因为我看到的例子由于FuncAnimation本身而更新数据;在我的例子中,数据是通过迭代生成的,在每次迭代结束时,必须绘制多边形的变化。

1 个答案:

答案 0 :(得分:1)

尝试以下示例。它将绘制一个圆圈移动的框。它应该很容易适应您的应用程序。

import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches

import numpy as np
import math
import time

verts = np.array([[0.,0.],[0.,1.],[1.,1.],[1.,0.],[0.,0.]])

codes = [Path.MOVETO,
         Path.LINETO,
         Path.LINETO,
         Path.LINETO,
         Path.CLOSEPOLY,
         ]

path = Path(verts, codes)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim(-2,2)
ax.set_ylim(-2,2)
plt.show(block=False)
i=0.0
while i<100:
#for i in range(100):
    ax.clear()
    x=math.sin(i)
    y=math.cos(i)

    print x, y

    verts2=np.copy(verts)
    for j in range(len(verts)):
        verts2[j]=verts[j]+np.array([x,y])
    path = Path(verts2, codes)
    patch = patches.PathPatch(path, facecolor='orange', lw=2)
    ax.add_patch(patch)
    plt.draw()
    i+=0.1