如何在Jupyter Notebook中交互式移除折线图的异常样本数据?
实现Jupyter Notebook中可点击交互的折线图(用于移除异常样本)
你可以通过Plotly的FigureWidget结合点击事件回调,实现直接点击折线切换隐藏/高亮状态,无需依赖图例。以下是完整实现代码:
import numpy as np import plotly.graph_objects as go # 生成示例数据(替换为你的实际数据) x = np.linspace(0, 100) y = np.random.randint(5, size=(5, 100)) # 创建FigureWidget fig = go.FigureWidget() for line_idx in range(y.shape[0]): fig.add_trace(go.Scatter( x=x, y=y[:, line_idx], mode='lines', name=f"样本 {line_idx}" )) # 定义点击回调函数:点击折线切换显示/隐藏,同时高亮(变粗) def toggle_line(trace, points, state): # 获取被点击的trace索引 trace_idx = points.trace_index with fig.batch_update(): # 切换可见性 fig.data[trace_idx].visible = not fig.data[trace_idx].visible # 切换线条粗细实现高亮效果 if fig.data[trace_idx].line.width == 2: fig.data[trace_idx].line.width = 4 else: fig.data[trace_idx].line.width = 2 # 给每个trace绑定点击事件 for trace in fig.data: trace.on_click(toggle_line) # 显示交互式图表 fig
使用说明
- 运行代码后,在Jupyter Notebook中会显示交互式折线图
- 直接点击任意折线,即可切换该折线的显示/隐藏状态,同时通过线条粗细变化实现高亮提示
- 完成标记后,可通过以下代码获取被隐藏(标记为异常)的样本索引,进而从原数组中移除:
# 获取所有被隐藏的样本索引 outlier_indices = [i for i, trace in enumerate(fig.data) if not trace.visible] # 移除异常样本 cleaned_y = np.delete(y, outlier_indices, axis=0)
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

