Вы можете создать несколько всплывающих подсказок для события загрузки диаграммы и управлять ими при наведении указателя мыши на событие.
Создать для каждой серии одну подсказку
Highcharts.chart('container', {
chart: {
type: 'pie',
events: {
load() {
this.tooltips = this.series.slice(1).map(
series => new Highcharts.Tooltip(
this,
Highcharts.merge(this.options.tooltip)
)
)
}
}
},
При наведении мыши на вызов tooltip.refresh(point)
, где точка - точка, которая должна зависать.Я призываю точки с одинаковыми именами.
plotOptions: {
series: {
point: {
events: {
mouseOver(e) {
const otherSeries = this.series.chart.series.filter(
series => series !== this.series
)
const otherPoints = otherSeries.map(
series => series.points.find(
point => point.name === this.name
)
)
this.series.chart.tooltips.forEach((tooltip, i) => {
tooltip.refresh(otherPoints[i])
})
}
}
}
}
},
Обернуть метод скрытия подсказки, чтобы все подсказки были скрыты одновременно.
Highcharts.wrap(Highcharts.Tooltip.prototype, 'hide', function(p, delay) {
if (this === this.chart.tooltip) {
p.call(this, delay)
this.chart.tooltips.forEach(tooltip => {
p.call(tooltip, delay)
})
}
})
пример в реальном времени: https://jsfiddle.net/8w30m3o8/
Если вы не хотите, чтобы всплывающие подсказки менялись между сериями, следует назначить всплывающую подсказку для определенной серии, например, основная подсказка должна обновляться только с точками из первой сериивторая подсказка с точками из второй серии и т. д.
Возможно, более простым решением было бы использовать 3 диаграммы и синхронизировать подсказки аналогично тому, как это делается в этом примере: https://www.highcharts.com/demo/synchronized-charts