python plotly - 悬停有时会显示多个值

python plotly - hovering shows more than one value sometimes

问题

我有一个由多个 go.Scatter 图组成的绘图图 (figure),使用 fig.add_trace(<the_data>) 添加到图中。

有些散点图共享相同的索引,有些则不同。将鼠标悬停在两个图表之间的连接上方时 不共享相同事件 我看到了不止一个标签。

在图片中您可以看到这样的示例:而不是只看到 green 标签或只看到 blue+red (他们组成一个单元,因为他们共享相同的事件),我看到了两者。我怎样才能让它只显示其中一个?

备注:

  1. 当悬停在两个段之间没有连接的点上方时,我确实得到了想要的结果:如果我在绿色之上,则为绿色;如果我在蓝色+红色之上,则为蓝色+红色。
  2. 我尝试将默认的 'x' 参数更改为 hovermode,但找不到有效的模式。最接近的选项是 closest,但只使用一种颜色的鞋子:green or blue or red 而不是 greenblue+red 根据需要。
  3. 当放大到足够大时,它会显示所需的标签(但让用户一直放大当然不是解决方案)。

代码

import plotly.graph_objs as go
import numpy as np

sc0 = go.Scatter({
    'x': np.array(['21/Jun/09 11:03', '21/Jun/09 11:04'], dtype=object),
    'y': np.array([17.407997, 17.372826], dtype=np.float32)
})

sc1 = go.Scatter({
    'x': np.array(['21/Jun/09 11:03', '21/Jun/09 11:04'], dtype=object),
    'y': np.array([17.352034, 17.33715], dtype=np.float32)
})
sc2 = go.Scatter({
    'x': np.array(['21/Jun/09 11:05', '21/Jun/09 11:06', '21/Jun/09 11:07',
                '21/Jun/09 11:08', '21/Jun/09 11:09', '21/Jun/09 11:10',
                '21/Jun/09 11:11', '21/Jun/09 11:12', '21/Jun/09 11:13',
                '21/Jun/09 11:14', '21/Jun/09 11:15', '21/Jun/09 11:16',
                '21/Jun/09 11:17', '21/Jun/09 11:18', '21/Jun/09 11:19',
                '21/Jun/09 11:20', '21/Jun/09 11:21', '21/Jun/09 11:22',
                '21/Jun/09 11:23', '21/Jun/09 11:24', '21/Jun/09 11:25',
                '21/Jun/09 11:26', '21/Jun/09 11:27', '21/Jun/09 11:28',
                '21/Jun/09 11:29', '21/Jun/09 11:30', '21/Jun/09 11:31',
                '21/Jun/09 11:32', '21/Jun/09 11:33', '21/Jun/09 11:34',
                '21/Jun/09 11:35', '21/Jun/09 11:36', '21/Jun/09 11:37',
                '21/Jun/09 11:38', '21/Jun/09 11:39', '21/Jun/09 11:40',
                '21/Jun/09 11:41', '21/Jun/09 11:42', '21/Jun/09 11:43',
                '21/Jun/09 11:44', '21/Jun/09 11:45', '21/Jun/09 11:46',
                '21/Jun/09 11:47', '21/Jun/09 11:48', '21/Jun/09 11:49',
                '21/Jun/09 11:50', '21/Jun/09 11:51', '21/Jun/09 11:52',
                '21/Jun/09 11:53', '21/Jun/09 11:54', '21/Jun/09 11:55',
                '21/Jun/09 11:56', '21/Jun/09 11:57', '21/Jun/09 11:58',
                '21/Jun/09 11:59', '21/Jun/09 12:00', '21/Jun/09 12:01',
                '21/Jun/09 12:02', '21/Jun/09 12:03', '21/Jun/09 12:04',
                '21/Jun/09 12:05', '21/Jun/09 12:06', '21/Jun/09 12:07'], dtype=object),
    'y': np.array([17.340586, 17.058613, 17.268505, 17.234064, 17.699133, 17.164728,
                17.129848, 17.094318, 17.058613, 17.020906, 16.992136, 16.98427 ,
                16.988392, 17.00848 , 17.031954, 17.051336, 17.054792, 17.041235,
                17.029837, 17.058613, 16.801, 16.969503, 16.235737, 16.97139 ,
                16.801, 16.977226, 16.965315, 16.958202, 16.235737, 16.955463,
                16.029837, 17.052027, 17.058613, 17.235737, 17.332283, 17.239872,
                17.129492, 17.058096, 16.801, 16.81308 , 16.699133, 16.591547,
                16.490868, 16.403502, 16.321527, 16.411316, 16.801, 16.698566,
                16.810646, 16.893055, 16.235737, 17.058613, 17.060478, 17.033163,
                16.998907, 16.966124, 16.235737, 16.911512, 16.886219, 16.235737,
                16.839949, 16.235737, 16.801], dtype=np.float32)
})

data = [sc0, sc1, sc2]

layout = go.Layout(
        margin=dict(t=20, l=40, r=20, b=40),
        hovermode='x'
    )

fig = go.Figure(layout=layout)
for item in data:
    fig.add_trace(item)
fig.show()

图表示例

您可以手动设置 hoverdistance。将其设置为 2 像素应该可以为您解决问题:

layout = go.Layout(
    margin=dict(t=20, l=40, r=20, b=40),
    hovermode='x',
    hoverdistance=2,
)

换句话说,现在光标需要靠近一个点(沿 x 轴)2 个像素才能显示其悬停。