繁体   English   中英

在Jupyter Notebook外显示动画

[英]Display animation outside of jupyter notebook

我想使用Jupyter笔记本来托管演示文稿的代码,但我不想将动画嵌入到笔记本中。 (因为嵌入视频非常耗时。)我想运行单元格并弹出一个屏幕,就像在终端中运行代码一样。

from matplotlib.animation import FuncAnimation 
from matplotlib.pyplot import plot, show, subplots, title  # annotate
from IPython.display import HTML

anim = FuncAnimation(fig, update, frames=numlin, interval=100, fargs=( 
                     d, g, lr_D, lr_G, hasFake, speed, show_sample),
                     init_func=init, blit=True, repeat=0)           
HTML(anim.to_html5_video())

为什么要使用笔记本? 使用笔记本电脑的主要原因是我有许多用于实验的不同设置。 我想使用不同的单元格来代表不同的配置,如果人们想查看特定配置的结果,则可以立即运行它。

时差 HTML函数需要一分钟以上的时间来生成我需要的视频。 在终端中时,动画将开始。 我想在会议期间快速制作原型,而听众要求显示不同初始条件下的结果。

笔记本计算机还有意外行为 笔记本中的视频与终端中弹出的视频不同。 笔记本中的视频在绘制时不会删除现有的帧,从而使动画看起来很凌乱,无法跟踪其轨迹。

笔记本输出中的动画

终端输出中的动画

这种绘画行为是我不想使用笔记本显示动画的另一个原因。

笔记本需要显示其他图吗? 我希望如此,但这不是必需的。 如果需要,我可以打开另一个笔记本仅用于绘图。

如果我不好解释,请告诉我。

笔记本内的动画

阅读问题,我想知道您是否知道%matplotlib notebook后端。 虽然它将在笔记本中显示动画,但我认为它可以满足所有描述的需求。

%matplotlib notebook
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation 
import numpy as np

a = np.random.rand(10,4)
fig, ax =plt.subplots()
ax.axis([0,1,0,1])
points1, = plt.plot([],[], ls="", marker="d", color="indigo")
points2, = plt.plot([],[], ls="", marker="o", color="crimson")

def update(i):
    points1.set_data(a[i:i+2,0],a[i:i+2,1])
    points2.set_data(a[i:i+2,2],a[i:i+2,3])
    return points1, points2

anim = FuncAnimation(fig, update, frames=len(a)-1, repeat=True)

请注意,使用这种动画(其中用set_data更新数据)无论是保存到视频还是在屏幕上显示都相同。 因此,如果没有时间替换视频,则可以按照最初显示的方式使用它,删除%matplotlib notebook并添加

from IPython.display import HTML
HTML(anim.to_html5_video())

如果使用matplotlib 2.1,您还可以选择JavaScript动画,

from IPython.display import HTML
HTML(ani.to_jshtml())

新窗口中的动画

如果要显示一个窗口,则既不应使用%matplotlib inline也不应该使用%matplotlib notebook ,而应将上面代码中的第一行替换为

%matplotlib tk

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM