Seite 1 von 1

Animation großer Datenmengen

Verfasst: Mittwoch 11. Juni 2014, 13:35
von unterzwerg
Ich erstelle eine Animation mit FuncAnimation. In jedem neuen frame kommt eine neues Polygons hinzu. Die Polygone aus den vorherigen frames ändern sich nicht.
Da es uU lange dauert, ALLE Polygone neu zu zeichnen, möchte ich nur das jeweils das letzte neu zeichnen. Die Polygone aus den vorherigen fraems sollen aber zu sehen bleiben.
blit=True/False löst das Problem nicht, weil in der init-Function noch keine Polygone vorhanden sind.

Code: Alles auswählen

import matplotlib.patches as patches
from matplotlib import animation

import random

print random.randint(0,10)

def init():

    xlim(-10.,110.)
    ylim(-10.,110.)

    return tuple([])


def newFrame(i):
    obstacle = []
    for ip in range(i):
        obstacle.append(gca().add_patch(patches.Polygon(poly[ip], color="grey", edgecolor=None)))

    return tuple(obstacle)


# main program

poly = []
for i in range(1000):
    poly.append([ [random.randint(0, 100),random.randint(0, 100)],\
                  [random.randint(0,100),random.randint(0,100)], \
                  [random.randint(0,100),random.randint(0,100)] ])  
    
fig = figure(1)

ani = animation.FuncAnimation(fig, newFrame, init_func=init, blit=True)
show()

sys.exit

Re: Animation großer Datenmengen

Verfasst: Mittwoch 11. Juni 2014, 16:04
von MagBen
Probier das mal:

Code: Alles auswählen

obstacle = []
def newFrame(i):
    obstacle.append(gca().add_patch(patches.Polygon(poly[i], color="grey", edgecolor=None)))
    return obstacle
So wird gca().add_patch(patches.Polygon(poly, color="grey", edgecolor=None)) nur einmal in jeden Frame aufgerufen. Ob Matplotlib damit in der Animation erkennt, dass die meisten Objekte schon geplottet sind oder trotzdem alles neu plottet kann ich Dir aber nicht sagen.

Re: Animation großer Datenmengen

Verfasst: Donnerstag 12. Juni 2014, 09:25
von unterzwerg
Super, das funktioniert! Herzlichen Dank!