【问题标题】:Interacting with dynamically updated figures in Jupyter notebook在 Jupyter notebook 中与动态更新的图形交互
【发布时间】: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


    【解决方案1】:

    在与 GUI 交互时,您确实不应该使用循环。这就是事件处理的用途。您不需要轮询变量,只需让事件处理程序执行必要的操作即可。

    此代码适用于我使用 TkAggGTK3Aggnbagg 后端:

    n_img = 4
    img = np.random.rand(20,20,n_img)
    fig,ax = plt.subplots()
    im = ax.imshow(img[:,:,0]) 
    
    nclicks = 0
    i = 0
    plt.title('{} clicks - image #{}'.format(nclicks, i))
    
    def onclick(event):
        global nclicks
        global i
        if nclicks < 2:
            nclicks += 1
        else:
            nclicks = 0
            i += 1
            im.set_data(img[:,:,i])
            if i == n_img - 1:
                fig.canvas.mpl_disconnect(cid)
        plt.title('{} clicks - image #{}'.format(nclicks, i))
        plt.draw()  # only necessary with some backends
    
    cid = fig.canvas.mpl_connect('button_press_event', onclick)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-01
      • 2020-05-19
      • 1970-01-01
      • 2018-04-12
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      相关资源
      最近更新 更多