我在木星做一些小测试。用户应该看到两个图,一个在左边,一个在右边。在点击左边的某个地方之后,右图上应该会发生一些事情。例如,在这里,单击左边的绘图将在右图上生成一个红色点,位于相同的位置:
%matplotlib notebook
def onclick(event):
ax.clear()
ax2.clear()
ax.set_xlim(0,10)
ax.set_ylim(0,10)
ax2.set_xlim(0,10)
ax2.set_ylim(0,10)
ax2.plot([event.xdata],[event.ydata],'o',color='red')
ax.figure.canvas.draw_idle()
ax2.figure.canvas.draw_idle()
fig = plt.figure(figsize=(20,10))
ax = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
ax.set_xlim(0,10)
ax.set_ylim(0,10)
ax2.set_xlim(0,10)
ax2.set_ylim(0,10)
cid = fig.canvas.mpl_connect('button_press_event',onclick)
这是可行的,但木星的可视化并不是最好的。有没有办法让这种互动的情节在木星笔记本之外工作呢?也许在一个不同尺寸的窗户里?作为一个例子,我们将如何处理上面的例子?
发布于 2022-05-25 16:21:50
您可以巧妙地使用并将您的绘图导出到html文件:
发布于 2022-05-25 13:47:53
我想我找到了一个可能的简单答案来满足我的需求。只需将代码放在python脚本中,删除“魔术”命令并在末尾插入:
plt.show(block=True)
通过这种方式,matplotlib只需在木星中使用与笔记本或内联不同的后端,并将图形绘制在单独的窗口中。此窗口与matplotlib中的交互式命令兼容。我不确定小部件的兼容性,不过我会尝试更新答案。
更新:我不认为ipywidget可以与plt.show()一起使用,因为这些部件不是在轴上绘制的,但是matplotlib (matplotlib.widgets)中有一些小部件可以使用。但是,在我的例子中,结果的速度并不令人满意,所以我将避免将matplotlib小部件与matplotlib事件捕获结合起来。
https://stackoverflow.com/questions/72362654
复制相似问题