在JupyterLab中使用Matplotlib存储两次鼠标点击坐标失败的问题求助
在JupyterLab中使用Matplotlib存储两次鼠标点击坐标失败的问题求助
我现在在JupyterLab里尝试用交互式Matplotlib图表存储两次鼠标点击的坐标。目前已经能实现点击图表时打印出x和y坐标,但尝试把这些坐标添加到全局列表coords或者numpy数组里的时候,数据就是存不进去。
我能成功获取单次点击的ix和iy,虽然可以拆分成两个单元格分别处理一次点击,但我更想用一个单元格完成两次点击坐标的存储。我的初始代码是参考相关问题修改的,为了适配ipympl和ipywidgets做了一些调整。
奇怪的是,虽然判断coords长度的if语句能正常终止点击事件,但最后打印coords的时候它还是空的。我刚从MATLAB转Python,可能漏掉了一些明显的点,希望能得到大家的建议或者替代方案。
我的代码如下:
%matplotlib ipympl import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit from scipy import stats import os import ipywidgets as widgets out = widgets.Output() coords = [] fig, ax = plt.subplots(figsize =(4, 4)) ax.plot(time,temp,'k-',linewidth = 1.5) ax.set_xlabel("Time (sec)") ax.set_ylabel(r"Temperature ($\degree$ C)") ax.tick_params(axis="both",direction='in',top=True, right=True) plt.show() @out.capture() def onclick(event): ix, iy = event.xdata, event.ydata print ('x = ',ix, 'y = ',iy) global coords coords.append(ix) coords.append(iy) # Disconnect after 2 clicks if len(coords) == 4: fig.canvas.mpl_disconnect(cid) return coords cid = fig.canvas.mpl_connect('button_press_event', onclick) display(out) print(coords)
附:交互图表和打印坐标的截图(供参考)
内容来源于stack exchange
相关产品推荐
相关产品推荐

