我试图使用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笔记本做任何想法?
答案 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