首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matplotlib动画在IPython笔记本中不起作用(空白绘图)

Matplotlib动画在IPython笔记本中不起作用(空白绘图)
EN

Stack Overflow用户
提问于 2014-08-16 04:27:58
回答 5查看 30K关注 0票数 21

我已经尝试了多个动画示例代码,但都不能正常工作。下面是我在Matplotlib文档中尝试过的基本方法:

代码语言:javascript
运行
复制
"""
A simple example of an animated plot
"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()

x = np.arange(0, 2*np.pi, 0.01)        # x-array
line, = ax.plot(x, np.sin(x))

def animate(i):
    line.set_ydata(np.sin(x+i/10.0))  # update the data
    return line,

#Init only required for blitting to give a clean slate.
def init():
    line.set_ydata(np.ma.array(x, mask=True))
    return line,

ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), init_func=init,
    interval=25, blit=True)
plt.show()

当我在IPython Notebook中执行上述操作时,我只看到生成了一个空白图。我尝试过在多台服务器(包括Wakari)、多台机器、多个浏览器(Chrome、FF、IE)上运行它。

我可以很好地将动画保存到mp4文件中,并且播放时效果很好。

如有任何帮助,我们不胜感激!

EN

回答 5

Stack Overflow用户

发布于 2017-10-23 03:06:53

总结一下您拥有的选项:

  • Using display in a loop使用IPython.display.display(fig)在输出中显示图形。使用循环时,您可能希望在显示新图形之前清除输出。请注意,这种技术通常给出的结果不是那么流畅。因此,我建议使用以下任何一种方法。

matplotlib.pyplot = ax.plot(0,2*np.pi,-1,1) matplotlib.pyplot=λi: l.set_data(t:i,x:i) for i in range(np.linspace(X)):clear_output (I) clear_output(wait=True) display( fig ) plt.show()

  • %matplotlib notebook使用IPython magic %matplotlib 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,0,2*np.pi,frames=len(t)) plt.show()

  • %matplotlib tk使用IPython魔法%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,0,2*np.pi,frames=len(t)) plt.show()

  • Convert动画转换为mp4视频

从IPython.display导入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,np.linspace,frames=len(t)) ani

%matplotlib内联导入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,0,2*np.pi,frames=len(t))从IPython.display导入HTML(ani.to_html5_video())

将动画

  • Convert到JavaScript

从IPython.display导入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,np.linspace,frames=len(t)) ani

%matplotlib内联导入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,0,2*np.pi,frames=len(t))从IPython.display导入HTML(ani.to_jshtml())

票数 32
EN

Stack Overflow用户

发布于 2015-06-15 20:58:01

根据此answer,您可以在IPython笔记本中使用%matplotlib nbagg启用nbagg后端,从而获得动画(以及完整的交互性支持)。

票数 11
EN

Stack Overflow用户

发布于 2014-11-30 16:30:43

就在刚才,我也遇到了和你一样的问题。我完全是一个新手,所以tcaswell的回答对我来说有点神秘。也许你明白了他的意思,或者找到了你自己的解决方案。如果你还没有,我会把这个放在这里。

我在谷歌上搜索了"matplotlib内联图形“,找到了this站点,上面提到你必须启用matplotlib模式。不幸的是,仅仅使用%maplotlib根本没有任何帮助。

然后,我在云雀上的IPython控制台中键入%matplotlib qt,它现在工作得很好,尽管绘图显示在一个单独的窗口中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25333732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档