Highcharts在具有多个系列和共享工具提示的图表之间共享工具提示

Highcharts shared tooltip between charts with multiple series and shared tooltip

本文关键字:共享 工具提示 之间 个系列 Highcharts      更新时间:2023-09-26

我正在尝试在图表之间设置共享工具提示。它工作得很好,只有当工具提示没有shared: true,如果我设置shared: true,我得到错误:

TypeError: 'undefined' is not an object (evaluating 'a[0].category') highcharts.js:3259

我准备的例子:http://jsfiddle.net/CAKQH/24408/

如果你在第一个图表上移动光标-它工作得很好,如果你评论shared: true它也工作,但如果你在第二个图表上移动光标,你会得到一个错误。

有人遇到这个错误吗?请帮我解决这个问题。

出现问题是因为您在一个图表上有shared: true,而在另一个图表上有默认(false)。这是一个问题,因为tooltip.refresh方法将采取不同的路径,并根据共享设置为true或false的图表使用不同的输入。

您可以在源代码的第8806行找到这个分支,用于tooltip.refresh方法:

// shared tooltip, array is sent over
if (shared && !(point.series && point.series.noSharedTooltip)) {
    ....
}
// single point tooltip
else {
    ....
}

你可以通过在你的syncTooltip方法中做一个分支来处理这个问题,像这样处理不同的情况(例如JFiddle):

function syncTooltip(container, p) {
    var i = 0;
    for (; i < charts.length; i++) {
        if (container.id != charts[i].container.id) {
            if(charts[i].tooltip.shared) {
                charts[i].tooltip.refresh([charts[i].series[0].data[p]]);
            }
            else {
                charts[i].tooltip.refresh(charts[i].series[0].data[p]);
            }
        }
    }
}

这样你就可以在两个图表上自由地将shared设置为true或false。

不幸的是,您的plotOptions.series.point.events.mouseOver事件不能捕获通过shared: true功能"选择"的点,因此您必须找到一个替代事件来正确捕获这种情况。