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