gpt4 book ai didi

python-3.x - iPython 笔记本中的动画

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:29 25 4
gpt4 key购买 nike

我正在尝试将动画放入 iPython 笔记本中,但没有找到解决方案。我看到一篇讨论使用交互式小部件的帖子,但是我遇到了几个问题:首先,我看到的小部件的每个示例都使用 slider 或其他一些输入,而我只希望动画在单元格时自动运行正在运行。其次,Jupyter 网站上的所有文档似乎都已过时——每当我下载并运行他们的笔记本时,我都会收到有关某些模块已弃用的消息,然后文件中的某些内容无法运行,大概是因为他们正在尝试导入和运行访问不再存在的文件。

我看过有关该主题的其他一些页面,但它们通常需要下载二进制文件或其他模块,但我部分使用它来教一些学生数学,并且我已经让他们下载 Anaconda - 我希望为了不让他们下载和安装更复杂的东西,同时花时间不谈论数学,从而进一步混淆问题。

简而言之,有没有一种方法可以让我在 iPython 笔记本中创建动画,只需要使用简单的导入命令,这些命令就可以开箱即用地运行,可以用来自 Anaconda 的软件来说话?

[编辑:我还应该注意,我已经使用 Tkinter 制作动画,并且我确信我可以在 matplotlib 中制作动画。因此,如果有一种方法可以让您制作的动画在 iPython 笔记本中渲染,那对我来说肯定是一个可行的解决方案。]

[进一步编辑:我想我也可以说出我现在希望制作动画的内容,尽管我真的希望在我决定的情况下可以对可以制作动画的事物范围保持相当的灵 active 。现在我正在尝试制作一个数字时钟,以苏美尔 60 进制数字显示每个数字,以说明不同的计数和基本系统。所以它最初应该显示 |然后一秒钟后||依此类推,直到 10 被表示为 < 等等,直到最终时钟滴答作响到一分钟,现在显示 |:|代表一分钟,一秒。]

[ future 人类请注意:如果您正在实现一些动画并愿意公开托管它,请在评论中留下指向它的链接!我很好奇现在人们如何制作动画,也有点好奇他们在制作什么动画。]

最佳答案

使用 matplotlib 在 Jupyter/IPython 中制作动画绘图的一些选项:

  • 在循环中使用 display 使用 IPython.display.display(fig) 在输出中显示图形。使用循环,您可能希望在显示新图形之前清除输出。请注意,这种技术通常给出的结果不太平滑。因此,我建议使用以下任何一种。

    import matplotlib.pyplot as plt
    import matplotlib.animation
    import numpy as np
    from IPython.display import display, clear_output

    t = np.linspace(0,2*np.pi)
    x = np.sin(t)

    fig, ax = plt.subplots()
    l, = ax.plot([0,2*np.pi],[-1,1])

    animate = lambda i: l.set_data(t[:i], x[:i])

    for i in range(len(x)):
    animate(i)
    clear_output(wait=True)
    display(fig)

    plt.show()

  • %matplotlib Notebook 使用 IPython magic %matplotlib Notebook 将后端设置为 Notebook 后端。这将使图形保持事件状态,而不是显示静态 png 文件,因此也可以显示动画。
    完整示例:

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

    t = np.linspace(0,2*np.pi)
    x = np.sin(t)

    fig, ax = plt.subplots()
    l, = ax.plot([0,2*np.pi],[-1,1])

    animate = lambda i: l.set_data(t[:i], x[:i])

    ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))

    plt.show()

  • %matplotlib tk 使用 IPython magic %matplotlib tk 将后端设置为 tk 后端。这将在新的绘图窗口中打开图形,该窗口是交互式的,因此也可以显示动画。
    完整示例:

    %matplotlib tk
    import matplotlib.pyplot as plt
    import matplotlib.animation
    import numpy as np

    t = np.linspace(0,2*np.pi)
    x = np.sin(t)

    fig, ax = plt.subplots()
    l, = ax.plot([0,2*np.pi],[-1,1])

    animate = lambda i: l.set_data(t[:i], x[:i])

    ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))

    plt.show()

  • 将动画转换为 mp4 视频(@Perfi 已经提到的选项):

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

    或在笔记本的开头使用plt.rcParams["animation.html"] = "html5"。这将需要 ffmpeg 视频编解码器可用于转换为 HTML5 视频。然后视频会内联显示。因此,这与 %matplotlib inline 后端兼容。完整示例:

    %matplotlib inline
    import matplotlib.pyplot as plt
    plt.rcParams["animation.html"] = "html5"
    import matplotlib.animation
    import numpy as np

    t = np.linspace(0,2*np.pi)
    x = np.sin(t)

    fig, ax = plt.subplots()
    l, = ax.plot([0,2*np.pi],[-1,1])

    animate = lambda i: l.set_data(t[:i], x[:i])

    ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))
    ani
    %matplotlib inline
    import matplotlib.pyplot as plt
    import matplotlib.animation
    import numpy as np

    t = np.linspace(0,2*np.pi)
    x = np.sin(t)

    fig, ax = plt.subplots()
    l, = ax.plot([0,2*np.pi],[-1,1])

    animate = lambda i: l.set_data(t[:i], x[:i])

    ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))

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

  • 将动画转换为 JavaScript:

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

    或在笔记本的开头使用plt.rcParams["animation.html"] = "jshtml"。这将使用 JavaScript 将动画显示为 HTML。这与大多数新浏览器以及 %matplotlib inline 后端高度兼容。它在 matplotlib 2.1 或更高版本中可用。
    完整示例:

    %matplotlib inline
    import matplotlib.pyplot as plt
    plt.rcParams["animation.html"] = "jshtml"
    import matplotlib.animation
    import numpy as np

    t = np.linspace(0,2*np.pi)
    x = np.sin(t)

    fig, ax = plt.subplots()
    l, = ax.plot([0,2*np.pi],[-1,1])

    animate = lambda i: l.set_data(t[:i], x[:i])

    ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))
    ani
    %matplotlib inline
    import matplotlib.pyplot as plt
    import matplotlib.animation
    import numpy as np

    t = np.linspace(0,2*np.pi)
    x = np.sin(t)

    fig, ax = plt.subplots()
    l, = ax.plot([0,2*np.pi],[-1,1])

    animate = lambda i: l.set_data(t[:i], x[:i])

    ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))

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

关于python-3.x - iPython 笔记本中的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55366441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com