Python, Matplotlib, многострочный сюжет (массив) и анимация
Я начинаю программировать на Python (и ООП), но у меня большой опыт программирования на Fortran (90/95) и Matlab.
Я разрабатываю небольшой инструмент с использованием анимации в среде tkinter. Целью этого инструмента является анимация многострочных (массив, а не вектор данных). Ниже приведен простой пример моей проблемы. Я не понимаю, почему результат этих двух способов построения данных так различен?
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()
Если вы наносите только «dline», каждая линия отображается отдельно и с другим цветом. Если вы строите только «mline», все линии связаны между собой и имеют только один цвет.
Моя цель - сделать анимацию с «mline», изменяющей данные в каждом цикле. Вот простой исходный код, иллюстрирующий мои цели:
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()
Я надеюсь, что я ясно показал свою проблему.
Спасибо, Николас.