FuncAnimation в Python не отображает анимацию и сохраняет пустой файл mp4 и не отображает анимацию как в Spyder, так и в Jupyter Notebook.

import numpy as np

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation 
plt.style.use('seaborn-pastel')


### random no. generated uniformly from 1 to 6
x = np.random.uniform(low = 1 , high = 6 ,size = 10)
x.mean()




### making a list of items for the plot
avg = []
trials = []
for j in range(1,100000):
    x = np.random.uniform(low = 1 , high = 6 ,size = j).mean()
    avg.append(x)
    y = j
    trials.append(y)





import matplotlib as mpl
mpl.rcParams['agg.path.chunksize'] = 10000

ax = plt.axes(xlim=(0,100000), ylim=(2, 4))
line, = ax.plot([], [], lw=3)
fig = plt.figure()

def init():
    line.set_data([], [])
    return line,
xdata , ydata = [], []
def animate(i):
    x = trials
    y = avg
    xdata.append(x)  
    ydata.append(y)  
    line.set_data(xdata, ydata)
    return line,

anim = FuncAnimation(fig, animate, init_func=init , frames = 500 ,interval = 20 , blit = True)

anim.save('simulation1.mp4', dpi=150, fps = 30, writer='ffmpeg',extra_args=['-vcodec', 'libx264'])
plt.show()

Я не могу понять, почему анимация не происходит как в ноутбуке jupyter, так и в spyder. Более того, когда я пытаюсь сохранить файл как mp4, он сохраняется как пустое видео. Любая помощь будет оценена.

1 ответ

Моя среда - это "лаборатория jupyter", поэтому я описываю ее как работающую на обоих. Пожалуйста, обращайтесь к комментариям и переключайтесь между комментариями.

Исправления:

  • %matplotlib nbagg
  • line.set_data(trains[:1],avg[:1])
  • Удаление таблиц стилей печати
    # jupyter notebook inline display
    %matplotlib nbagg

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation 
    import matplotlib as mpl

    # Jupyter lab
    # from IPython.display import HTML
    # %matplotlib inline

    # making a list of items for the plot
    avg = []
    trials = []
    for j in range(1,101):
        y = np.random.uniform(low = 1 , high = 6 ,size = j).mean()
        avg.append(y)
        x = j
        trials.append(x)

    fig = plt.figure()
    ax = plt.axes(xlim=(0,100), ylim=(2, 4))
    line, = ax.plot([], [], 'r-', lw=3)

    def animate(i):
        line.set_data(trials[:i], avg[:i])
        return line,

    anim = FuncAnimation(fig, animate, interval=20)

    anim.save('simulation1.mp4', dpi=150, fps=30, writer='ffmpeg', extra_args=['-vcodec', 'libx264'])
    # jyupter notebook
    plt.show()

    # jupyter lab 
    # plt.close()
    # HTML(anim.to_html5_video())

https://stackru.com/images/3eee161f43be9a5e8fc87f3eedf880806ee546ed.png

Другие вопросы по тегам