【发布时间】:2016-10-27 22:10:18
【问题描述】:
this 问题的公认答案提供了一种在使用 nbagg 后端时动态更新 Jupyter 笔记本中的 matplotlib 图的方法。但是,此解决方案在循环完成之前不允许与绘图进行任何交互,这意味着您只能与绘图的最终版本进行交互。是否可以在每个更新步骤后与动态更新的图形进行交互?
我想要做的是访问每个图像上的 matplotlib 事件(在这种情况下是点击),然后在 X 次点击后绘制下一张图像。以下代码适用于qt 后端,但我不知道如何将其转换为适用于nbagg。目前我可以让事件处理或动态绘图工作,但不能同时工作。
import numpy as np
import time
import matplotlib.pyplot as plt
n_img = 4
img = np.random.rand(20,20,n_img)
fig,ax = plt.subplots()
im = ax.imshow(img[:,:,0])
clicks = []
def onclick(event):
clicks.append(('button=%d, x=%d, y=%d, xdata=%f, ydata=%f' %
(event.button, event.x, event.y, event.xdata, event.ydata)))
cid = fig.canvas.mpl_connect('button_press_event', onclick)
i = 1
while i < n_img:
plt.pause(0.01)
time.sleep(0.1)
if len(clicks) > 2: # plot next image after 3 clicks
clicks = []
im.set_data(img[:,:,i])
plt.draw()
i += 1
【问题讨论】:
标签: python matplotlib jupyter-notebook