Python, Matplotlib, Plotten von mehreren Linien (Array) und Animation

Ich beginne mit dem Programmieren in Python (und OOP), habe aber solide Erfahrung mit Fortran (90/95) und Matlab-Programmierung.

Ich entwickle ein kleines Tool mit Animation auf Tkinter-Umgebung. Das Ziel dieses Tools ist die Animation mehrerer Linien (ein Array und kein Datenvektor). Unten ein einfaches Beispiel für mein Problem. Ich verstehe nicht, warum das Ergebnis dieser beiden Arten des Zeichnens von Daten so unterschiedlich ist.

from pylab import *

Nx=10
Ny=20

xx   = zeros( ( Nx,Ny) )
data = zeros( ( Nx,Ny) )

for ii in range(0,Nx):
    for jj in range(0,Ny):
        xx[ii,jj]   = ii
        data[ii,jj] = jj


dline = plot(xx,data)

mline, = plot([],[])
mline.set_data(xx.T,data.T)

show()

Wenn Sie nur "dline" zeichnen, wird jede Linie separat und in einer anderen Farbe gezeichnet. Wenn Sie nur "mline" zeichnen, werden alle Linien verknüpft und mit nur einer Farbe.

Mein Ziel ist es, eine Animation mit "mline" zu erstellen, bei der die Daten bei jeder Schleife geändert werden. Hier ein einfacher Quellcode, der meine Zwecke veranschaulicht:

from pylab import *
from matplotlib import animation

Nx=10
Ny=20

fig = plt.figure()
fig.set_dpi(100)
fig.set_size_inches(7, 6.5)

ax = plt.axes(xlim=(0, Nx), ylim=(0, Ny))

xx   = zeros( ( Nx,Ny) )
data = zeros( ( Nx,Ny) )
odata = zeros( ( Nx,Ny) )

for ii in range(0,Nx):
    for jj in range(0,Ny):
        xx[ii,jj]    = ii
        odata[ii,jj] = jj
        data[ii,jj]  = 0.

#dline = plot(xx,odata)

mline, = plot([],[])

def init():
    mline.set_data([],[])
    return mline,

def animate(coef):
   for ii in range(0,Nx):
        for jj in range(0,Ny):
            data[ii,jj] = odata[ii,jj] * (1.-float(coef)/360.)

   mline.set_data(xx.T,data.T)
   return mline,

anim = animation.FuncAnimation(fig, animate, 
                               init_func=init, 
                               frames=360, 
                               interval=5,
                               blit=True)

plt.show()

Ich hoffe, dass ich mein Problem deutlich gemacht habe.

Danke, Nicolas.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage