python plotly - 悬停有时会显示多个值
python plotly - hovering shows more than one value sometimes
问题
我有一个由多个 go.Scatter
图组成的绘图图 (figure
),使用 fig.add_trace(<the_data>)
添加到图中。
有些散点图共享相同的索引,有些则不同。将鼠标悬停在两个图表之间的连接上方时 不共享相同事件 我看到了不止一个标签。
在图片中您可以看到这样的示例:而不是只看到 green 标签或只看到 blue+red (他们组成一个单元,因为他们共享相同的事件),我看到了两者。我怎样才能让它只显示其中一个?
备注:
- 当悬停在两个段之间没有连接的点上方时,我确实得到了想要的结果:如果我在绿色之上,则为绿色;如果我在蓝色+红色之上,则为蓝色+红色。
- 我尝试将默认的 'x' 参数更改为
hovermode
,但找不到有效的模式。最接近的选项是 closest
,但只使用一种颜色的鞋子:green or blue or red 而不是 green 或 blue+red 根据需要。
- 当放大到足够大时,它会显示所需的标签(但让用户一直放大当然不是解决方案)。
代码
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 个像素才能显示其悬停。
问题
我有一个由多个 go.Scatter
图组成的绘图图 (figure
),使用 fig.add_trace(<the_data>)
添加到图中。
有些散点图共享相同的索引,有些则不同。将鼠标悬停在两个图表之间的连接上方时 不共享相同事件 我看到了不止一个标签。
在图片中您可以看到这样的示例:而不是只看到 green 标签或只看到 blue+red (他们组成一个单元,因为他们共享相同的事件),我看到了两者。我怎样才能让它只显示其中一个?
备注:
- 当悬停在两个段之间没有连接的点上方时,我确实得到了想要的结果:如果我在绿色之上,则为绿色;如果我在蓝色+红色之上,则为蓝色+红色。
- 我尝试将默认的 'x' 参数更改为
hovermode
,但找不到有效的模式。最接近的选项是closest
,但只使用一种颜色的鞋子:green or blue or red 而不是 green 或 blue+red 根据需要。 - 当放大到足够大时,它会显示所需的标签(但让用户一直放大当然不是解决方案)。
代码
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 个像素才能显示其悬停。