如何在离线Plotly Python Jupyter Notebook中获取选中点的数据?
获取Plotly离线散点图选中区域的点数据/索引
首先先看你提供的原始散点图代码:
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot import plotly.graph_objs as go import numpy as np N = 30 random_x = np.random.randn(N) random_y = np.random.randn(N) # Create a trace trace = go.Scatter( x = random_x, y = random_y, mode = 'markers' ) data = [trace] # Plot and embed in ipython notebook! iplot(data, filename='basic-scatter')
要实现选中区域后获取对应点的信息,咱们可以改用plotly.graph_objects.FigureWidget来创建交互式图表,它支持监听选择事件,具体实现如下:
实现步骤
- 导入
FigureWidget并初始化交互式图表 - 添加散点图轨迹
- 定义选择事件的回调函数,提取选中点的索引、x、y数据
完整示例代码
from plotly.graph_objects import FigureWidget import plotly.graph_objs as go import numpy as np # 生成随机数据 N = 30 random_x = np.random.randn(N) random_y = np.random.randn(N) # 创建FigureWidget交互式图表 fig = FigureWidget() # 添加散点轨迹 scatter = fig.add_scatter(x=random_x, y=random_y, mode='markers') # 定义选择事件的回调函数 def on_selection_change(trace, points, selector): # 获取选中点的索引 selected_indices = points.point_inds # 提取对应索引的x、y数据 selected_x = [random_x[i] for i in selected_indices] selected_y = [random_y[i] for i in selected_indices] print("选中点的索引:", selected_indices) print("选中点的x数据:", selected_x) print("选中点的y数据:", selected_y) # 把回调函数绑定到散点轨迹的选择事件上 scatter.on_selection(on_selection_change) # 显示交互式图表 fig
使用说明
运行上述代码后,在Jupyter Notebook里会出现交互式散点图:
- 按住鼠标左键拖动即可框选目标区域
- 松开鼠标后,控制台会自动打印出选中点的索引、x值和y值
- 点击图表空白区域即可取消当前选中状态
这种方式完全基于离线Plotly环境,不需要依赖外部服务,完美适配Jupyter Notebook的交互场景。
内容的提问来源于stack exchange,提问作者d-grossman
相关产品推荐
相关产品推荐

