使用 drawnow 的 python jupyter notebook 中的动态绘图



我正在尝试使用drawnow动态绘制来自相机的一些数据。但是,动态绘图(使用 matplotlib 和 drawnow(似乎不适用于 jupyter notebook。

它目前正在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 笔记本来做到这一点吗?

我从来都不太明白drawnow的目的。只需调用函数,您应该得到完全相同的结果。

无论是 drawnow 还是它等效的 简单地使用 plt.ion()plt.draw()plt.pause() 都不适用于 jupyter 笔记本。肯定不使用%matplotlib inline后端(因为您无法对 png 进行动画处理(;但也没有使用%matplotlib notebook后端,因为事件循环在显示最终图之前尚未启动。

在 Jupyter 笔记本中显示动画的选项列在 iPython 笔记本中的动画。

推荐的方法是创建一个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()

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

您可以通过在笔记本开头的单元格中添加%matplotlib notebook魔术命令来执行此操作(例如,在导入matplotlib之后

(

更多信息在这里: http://ipython.readthedocs.io/en/stable/interactive/plotting.html

最新更新