我正在尝试使用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