You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:16:01