使用drawow的python jupyter笔记本中的动态情节

时间:2018-04-30 15:47:56

标签: python python-3.x matplotlib jupyter-notebook

我试图使用drawow动态地从相机绘制一些数据。然而,动态绘图(使用matplotlib和drawow)似乎并没有在jupyter笔记本上工作。

它目前在Pycharm工作。

我的代码:

import matplotlib.pyplot as plt
import numpy as np
from drawnow import *


x = np.random.randn(10, 2)


def function_to_draw_figure():
    plt.plot(i, j, 'r.')


plt.ion()
figure()
for i, j in x:
    drawnow(function_to_draw_figure)
    plt.xlim(-1, 1)
    plt.ylim(-1, 1)
    plt.pause(0.5)

我希望这个例子能够在同一个图上动态绘制10个点(如pycharm中)。实际发生的是多个数字而不是一个。

为什么我无法使用jupyter笔记本做任何想法?

2 个答案:

答案 0 :(得分:1)

我从未完全理解drawnow的目的。你应该得到完全相同的结果只是调用你的函数。

简单地使用plt.ion()plt.draw()plt.pause()的drawow及其等价物都无法在jupyter笔记本中使用。确保不使用%matplotlib inline后端(因为你无法为png动画);但由于事件循环没有启动,因此也没有%matplotlib notebook后端,直到显示最终数字。

在jupyter笔记本中显示动画的选项列于 here

推荐的方法是创建FuncAnimation

上面的动画看起来像

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

x = np.random.rand(10, 2)


def function_to_draw_figure(i):
    line.set_data(*x[i,:])

plt.figure()
line, = plt.plot([], marker="o")
plt.xlim(0, 1)
plt.ylim(0, 1)

ani = FuncAnimation(plt.gcf(), function_to_draw_figure, frames=len(x), 
                    interval=500, repeat=False)

plt.show()

答案 1 :(得分:0)

您是否尝试过将matplotlib与Jupyter笔记本中的notebook后端一起使用?

您可以在笔记本开头的单元格中添加%matplotlib notebook魔术命令(例如,在导入matplotlib之后)

此处有更多信息:http://ipython.readthedocs.io/en/stable/interactive/plotting.html