Plotly中如何实现hline与对应散点图图例项联动显隐
问题解答
Plotly 完全支持你需要的图例联动效果。
你当前提供的代码无法实现联动,核心原因是 fig.add_hline() 添加的是布局层的独立形状对象,不属于可被图例控制的轨迹(trace),默认不会和散点轨迹的显隐状态绑定。
实现方案
核心逻辑是将均值参考线也作为独立的线轨迹添加,通过legendgroup参数将同数据集的散点和参考线绑定为同一组,即可实现点击图例时同步显隐:
- 不再使用
add_hline()方法添加参考线,改用go.Scatter绘制水平直线 - 给同一数据集对应的散点、参考线设置完全相同的
legendgroup值 - 给参考线轨迹设置
showlegend=False,避免图例出现重复条目 - 可给参考线设置和对应散点一致的颜色,视觉上明确归属关系
修改后可直接运行的代码
import pandas as pd import plotly.graph_objects as go df = pd.DataFrame({'x': [0, 1, 2], 'y1': [5, 4, 7], 'y2': [2, 3, 1]}) fig = go.Figure() # 绘制y1数据集散点 fig.add_trace(go.Scatter( x=df['x'], y=df['y1'], mode='markers', name='y1', legendgroup='y1', marker_color='#1f77b4' )) # 绘制y1对应的均值参考线 fig.add_trace(go.Scatter( x=[df['x'].min(), df['x'].max()], y=[df['y1'].mean(), df['y1'].mean()], mode='lines', line=dict(color='#1f77b4', dash='dash'), legendgroup='y1', showlegend=False, hovertemplate='y1均值: %{y:.2f}<extra></extra>' )) # 绘制y2数据集散点 fig.add_trace(go.Scatter( x=df['x'], y=df['y2'], mode='markers', name='y2', legendgroup='y2', marker_color='#ff7f0e' )) # 绘制y2对应的均值参考线 fig.add_trace(go.Scatter( x=[df['x'].min(), df['x'].max()], y=[df['y2'].mean(), df['y2'].mean()], mode='lines', line=dict(color='#ff7f0e', dash='dash'), legendgroup='y2', showlegend=False, hovertemplate='y2均值: %{y:.2f}<extra></extra>' )) fig.show()
补充说明
- 运行后点击图例中的
y1/y2项,对应的散点和均值线会同步隐藏或显示 - 如果需要均值线始终铺满整个绘图区域、不受x轴缩放/平移影响,可以将参考线轨迹的
x参数设为[0, 1],同时新增参数xref='paper'即可 - 可以自行修改参考线的
line参数调整线型、粗细、透明度等样式
内容的提问来源于stack exchange,提问作者Mibi
相关产品推荐
相关产品推荐

