Как сделать анимацию с циклом for, когда у меня есть данные для каждого изображения? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть массив с большим количеством переменных. Каждая строка представляет данные, необходимые для вычисления одного кадра y, тогда как x - это numpy.linspace массив.

Когда я использую plt.plot(x, np.conj(bildevector[i,:])*bildevector[i,:] в for-loop, я получаю именно те изображения, которые мне нужны, но я хочу, чтобы они были в виде видеофайла.

Я пытался использовать ArtistAnimation, но не могу заставить его работать.

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
""" Plotter de lagrede verdiene """    

fig = plt.figure()
ims = []
for i in range(Nx):
    plt.grid(True)
    #plt.plot(x, np.conj(bildevector[i,:])*bildevector[i,:])
    im = plt.imshow(plt.plot(x, 
    np.conj(bildevector[i,:])*bildevector[i,:]), animated=True)
    ims.append([im])
    #plt.show()
    #plt.close()

ani = animation.ArtistAnimation(fig, ims, interval=50, blit=True,
                            repeat_delay=1000)

Работают части с #.

Я тоже пробовал это:

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


def f(u,v):
    return np.conj(bildevector[v,:])*bildevector[v,:]
fig = plt.figure()
ax = plt.axes(xlim=(0,L),ylim=(0, 8*10^7))

ims = []
for i in range(340):
    im = plt.imshow((x, np.real(np.conj(bildevector[i,:])*bildevector[i,:])), animated=True)
    ims.append([im])

ani = animation.ArtistAnimation(fig, ims, interval=50, blit=True,
                                repeat_delay=1000)

ani.save('dynamic_images.mp4')

plt.show()

Я ожидаю увидеть окончательное изображение графика в консоли, но все, что я получаю, - это пустое изображение с осью Y справа и осью X в одной точке, равной 0. Я также ожидаю получить файл с некоторым фактическим движением.

1 Ответ

0 голосов
/ 03 мая 2019

Я думаю, что вас смутил пример matplotlib, который использует plt.imshow() для создания своих исполнителей. Похоже, вы хотите создать график, используя plt.plot(), поэтому вам не нужно использовать imshow:

fig = plt.figure()
ims = []
for i in range(Nx):
    plt.grid(True)
    p = plt.plot(x, 
        np.conj(bildevector[i,:])*bildevector[i,:]), animated=True)
    ims.append(p)

ani = animation.ArtistAnimation(fig, ims, interval=50, blit=True,
                            repeat_delay=1000)

Обратите внимание, что есть одна тонкость в том, что plt.plot() возвращает список художников, тогда как большинство других функций построения графиков (включая plt.imshow()) обычно возвращают только один объект Artist. Вы должны помнить об этом, когда хотите добавить возвращенные значения в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...