2016-07-13 3 views
2

Цель состоит в том, чтобы нарисовать многоугольник, а затем перевести его по горизонтали. Это нужно показать как анимацию. Ниже мой код: -анимация для перевода многоугольника с использованием matplotlib

import matplotlib.pyplot as plt 
from matplotlib.path import Path 
import matplotlib.patches as patches 
import time 
import numpy as np 

verts = np.array([ 
    [0., -0.25], 
    [0.5, 0.], 
    [0., 0.25], 
    [0., -0.25] 
    ]) 
codes = [Path.MOVETO, 
     Path.LINETO, 
     Path.LINETO, 
     Path.CLOSEPOLY, 
     ] 

path = Path(verts, codes) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
patch = patches.PathPatch(path, facecolor='orange') 
ax.add_patch(patch) 
ax.set_xlim(-10,10) 
ax.set_ylim(-10,10) 
plt.show() 
time.sleep(1) 
verts[:,0]=verts[:,0]+3 
path = Path(verts, codes) 
patch = patches.PathPatch(path, facecolor='orange') 
ax.add_patch(patch) 
plt.draw() 

plt.show() Upto, я нарисовать треугольник, а затем показать его. После этого я даю паузу, чтобы смоделировать время прохождения анимации. Затем я перерисовываю треугольник, но когда я попрошу matplotlib обновить сюжет, изменений не будет. Где я делаю ошибку?

Второй вопрос, вместо перерисовки треугольника, я хотел только обновить координаты вершины уже существующего треугольника, используя метод set_patch, но такого метода нет. В то время как мы используем set_ydata и т. Д. Для изменения существующих графиков и создания анимации. Как использовать некоторый метод установки для оживления желаемого движения?

ответ

0

С помощью от earlier post, я был в состоянии понять, как это сделать: -

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) 

v= np.array([ 
    [0., -0.25], 
    [0.5, 0.], 
    [0., 0.25] 
    ]) 

go= patches.Polygon(v,closed=True, fc='r', ec='r') 
patch=ax.add_patch(go) 
def init(): 
    return patch, 

def animate(i): 
    v[:,0]+=i 
    go.set_xy(v) 
    patch=ax.add_patch(go) 
    return patch, 

ani = animation.FuncAnimation(fig, animate, np.arange(1, 5), init_func=init, 
           interval=1000, blit=True) 
plt.show() 

Таким образом, мы можем использовать set_xy перевести полигон. Это также решает проблему в this post, предоставляя способ создания дескрипторов объектов и управления ими.