最近做了一个坐标与鼠标点击交互的一个小功能,这里记录一下:
import plotly.graph_objects as go
#点击二维坐标获取坐标
def get_click_coor(x,y,click_times):
coor = []
f = go.FigureWidget([go.Scatter(x=x, y=y, mode='markers')])
scatter = f.data[0]
def get_point(trace, points, selector):
print(points.xs[0],points.ys[0])
coor.append([points.xs[0],points.ys[0]])
if len(coor)==click_times:
f.close()
scatter.on_click(get_point)
return f,coor
#点击三维坐标获取坐标
def get_click_coor_3d(x,y,z,click_times):
coor = []
f = go.FigureWidget([go.Scatter3d(x=x, y=y,z=z,mode='markers')])
scatter3d = f.data[0]
def get_point(trace, points, selector):
print(points.xs[0],points.ys[0],z[points.point_inds[0]])
coor.append([points.xs[0],points.ys[0],z[points.point_inds[0]]])
if len(coor)==click_times:
f.close()
scatter3d.on_click(get_point)
return f,coor
函数调用后会生成一个可以交互的图像,通过click_times的值来控制点击坐标的次数,达到点击次数后会推出函数:
x1 = np.array(range(1,10))
y1 = np.sin(x1)
f,coor = get_click_coor(x1,y1,3)
display(f)
运行后直接生成可交互图片,点击图片上的3个坐标点后会退出函数。
顺便说下使用plotly制作可交互图片时最好用jupyter nootbook。