Plotly使用hovermode='y unified'时悬浮标签显示异常问题
你没有误解y unified悬浮模式的预期行为,该模式的设计逻辑确实是在同一y轴坐标下展示所有曲线对应的取值,你遇到的是Plotly针对横向折线图(y轴为数据索引、x轴为曲线值)的默认hover匹配规则导致的异常。
问题根因
- 取值不对齐:Plotly默认的
y unified匹配逻辑为每条曲线独立搜索离光标垂直距离最近的采样点,而非严格匹配全局相同y值。如果你的y轴索引为浮点型,存在精度误差或曲线采样间隔有微小差异,就会出现各曲线匹配到不同y值的情况。 - 部分值不显示:Plotly默认有hover距离阈值,当某条曲线的最近采样点与光标垂直距离超过阈值时,就算处于同一y区间也不会展示对应数值,和
y unified的设计逻辑冲突。
修复方案
直接修改你的代码,在fig = px.line(...)生成图表后、返回前新增以下配置即可:
# 1. 统一所有trace的hover模板,固定y值显示精度 fig.for_each_trace(lambda t: t.update( hoveron="points", # 可根据你的实际需求调整x和y的显示精度 hovertemplate="%{fullData.name}: %{x:.3f}<br>深度: %{y:.1f}<extra></extra>" )) # 2. 修改y轴悬浮匹配规则,强制严格对齐全局y值 fig.update_yaxes( showspikes=True, spikemode="across", spikesnap="data", hoverdistance=0, # 0表示关闭距离容错,严格匹配y坐标 spikedistance=-1 # -1表示无限匹配距离,所有同y值的曲线都会触发悬浮 )
如果调整后仍存在匹配偏差,可提前统一y轴索引的精度,避免浮点误差:
# 生成图表前统一y轴索引精度,保留1位小数(可根据你的采样间隔调整) curve_df.index = curve_df.index.round(1)
内容的提问来源于stack exchange,提问作者Brasem
相关产品推荐
相关产品推荐

