Сложность анимации графа matplotlib с помощью moviepy
Я должен сделать анимацию из большого числа (~ 90 000) фигур. Для контекста это график карты на каждый день с 1700 по 1950 год, с интересными событиями, отмеченными в соответствующие дни. Я могу сделать это с помощьюmatplotlib.animation.FuncAnimation
и у меня есть код, который делает это успешно в течение небольшого периода тестирования. Однако с полным набором рисунков на рендеринг уходит непрактичное время, что приводит к очень большому файлу фильма. Я читал это, по-видимомуmoviepy
предлагает преимущества как по скорости, так и по размеру файла. Тем не менее, у меня возникли проблемы с тем, чтобы заставить это работать - я считаю, что моя проблема в том, что я не понял, как правильно установитьduration
а такжеfps
аргументы.
Упрощенная версия моего кода:
import numpy as np
import matplotlib.pyplot as plt
from moviepy.video.io.bindings import mplfig_to_npimage
import moviepy.editor as mpy
fig = plt.figure()
ax = plt.axes()
x = np.random.randn(10,1)
y = np.random.randn(10,1)
p = plt.plot(x,y,'ko')
time = np.arange(2341973,2342373)
def animate(i):
xn = x+np.sin(2*np.pi*time[i]/10.0)
yn = y+np.cos(2*np.pi*time[i]/8.0)
p[0].set_data(xn,yn)
return mplfig_to_npimage(fig)
fps = 1
duration = len(time)
animation = mpy.VideoClip(animate, duration=duration)
animation.write_videofile("test.mp4", fps=fps)
Однако это не дает ожидаемого результата создания фильма с одним кадром для каждого элементаtime
и сохраняя это в .mp4. Я не вижу, где я ошибся, любая помощь или указатели будут оценены.
С наилучшими пожеланиями, Люк