Skip to content Skip to sidebar Skip to footer

Using Matplotlib-patch Inside An Animation

I try to generate an empty patch to be able to set data later on. In order to explain my problem better, i will give an example: from matplotlib import pyplot as plt import matplot

Solution 1:

I'm not sure what shape you're using, if you use a polygon, you can update the vertices of a polygon with the set_xy method and create the initial polygon with vertices that are all equal to each other. Example below. If you need a completely arbitrary shape, you might be better off plotting lines and using fill_between to draw it.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation

# Create the figure and axis
fig = plt.figure()
ax = plt.axes(xlim=(0, 10), ylim=(0, 10))

# mMke the initial polygon with all vertices set to 0
pts = [[0,0], [0,0], [0,0], [0,0]]
patch = plt.Polygon(pts)
ax.add_patch(patch)

def init():   
    return patch,

def animate(i):
    # Randomly set the vertices
    x1= 5*np.random.rand((1))[0]
    x2= 5*np.random.rand((1))[0] 
    x3= 5*np.random.rand((1))[0] + 5
    x4= 5*np.random.rand((1))[0] + 5

    y1= 5*np.random.rand((1))[0]
    y2= 5*np.random.rand((1))[0] 
    y3= 5*np.random.rand((1))[0] + 5
    y4= 5*np.random.rand((1))[0] + 5

    patch.set_xy([[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()

Post a Comment for "Using Matplotlib-patch Inside An Animation"