Highcharts 哑铃图在同类别(x-axis category)下存在多个数据点时,默认仅触发一个 tooltip,根本原因是 findNearestPointBy 默认值为 'x';将其设为 'xy' 即可实现每个哑铃段独立响应鼠标悬停。
highcharts 哑铃图在同类别(x-axis category)下存在多个数据点时,默认仅触发一个 tooltip,根本原因是 `findnearestpointby` 默认值为 `'x'`;将其设为 `'xy'` 即可实现每个哑铃段独立响应鼠标悬停。
在 Highcharts 的 dumbbell 图表类型中,当多个数据点共享同一 x 轴分类(如本例中 "Test1" 或 "Test2" 出现两次),图表默认采用 findNearestPointBy: 'x' 策略——即仅依据 x 坐标查找最近点,忽略 y 方向差异。这导致即使两个哑铃段在 y 轴(时间轴)上完全不重叠,只要它们属于同一 category,鼠标悬停时 Highcharts 仍只高亮并显示其中「x 坐标最接近」的那一个点的 tooltip,其余点被静默忽略。
✅ 正确解法:显式为 dumbbell 系列设置 findNearestPointBy: 'xy',强制 Highcharts 同时考虑 x 和 y 坐标进行最近点判定,从而支持同一 category 下多个哑铃段的独立交互。
以下是修复后的关键配置片段(已适配您的 inverted 场景):
"series": [{ "type": "dumbbell", "name": "Test", "findNearestPointBy": "xy", // ? 关键修复项:启用二维最近点查找 "data": [ { "name": "Test1", "low": 1658882324000, "high": 1699267066000, "v": "A" }, { "name": "Test1", "low": 1681067066000, "high": 1739067066000, "v": "B" }, { "name": "Test2", "low": 1658882324000, "high": 1690267066000, "v": "C" }, { "name": "Test2", "low": 1711067066000, "high": 1739067066000, "v": "D" } ], // 其余配置保持不变...}]
? 注意事项:
? 补充建议:为提升可访问性与用户体验,还可为每个点添加唯一 id 或增强 tooltip.headerFormat,例如:
"tooltip": { "headerFormat": '<span style="font-size: 0.9em"><b>{point.key}</b></span><br/>', "pointFormat": '{point.v}: {point.low:%Y-%m-%d} → {point.high:%Y-%m-%d}'}
通过这一配置,您的哑铃图将真正支持同一分类下的多区间精细化交互,既满足数据表达深度,又保障用户操作直觉。