Показать всплывающую подсказку для невидимых серий в Highcharts

Я пытаюсь отобразить пользовательскую подсказку с помощью Highcharts. Здесь вы можете найти пример кода: http://jsfiddle.net/jalbertbowdenii/fDNh9/188/

Когда вы наводите курсор на диаграмму, вы можете видеть, что всплывающая подсказка содержит только значения из серии 2, но не из серии 1 (которая невидима). Когда вы нажимаете "Серия 1" в легенде, вы можете увидеть значения из серии 1 во всплывающей подсказке.

РЕДАКТИРОВАТЬ: no code, чтобы зафиксировать, просто фиксируя linkrot/придерживаясь правил редактирования...
Есть ли способ отобразить значения из невидимой серии во всплывающей подсказке?

Ответ 1

tooltip: {
    formatter: function() {
        var s = '<b>'+ this.x +'</b>';
        var chart = this.points[0].series.chart; //get the chart object
        var categories = chart.xAxis[0].categories; //get the categories array
        var index = 0;
        while(this.x !== categories[index]){index++;} //compute the index of corr y value in each data arrays           
        $.each(chart.series, function(i, series) { //loop through series array
            s += '<br/>'+ series.name +': ' +
                series.data[index].y +'m';     //use index to get the y value
        });           
        return s;
    },
    shared: true
}

Ответ 2

Форматирование всплывающей подсказки - это функция, подобная любой другой функции, поэтому, если вы просто делаете данные доступными, она может возвращать строку со значениями для всех серий. В этом примере я переместил серию массивов и категорий в отдельные переменные, а форматирование всплывающей подсказки использует индекс в этих массивах, чтобы найти значения.

formatter: function() {
    var index = $.inArray(this.x, categories);
    var s = '<b>'+ this.x +'</b>';

    s += '<br/>'+ chart.series[0].name + ': ' + data1[index];
    s += '<br/>'+ chart.series[1].name + ': ' + data2[index];

    return s;
}

Ответ 3

Еще один способ сделать это - сделать некоторые атрибуты серии невидимыми, а не всю серию. Это позволит вам увидеть его в подсказке и легенде.

Вот что я сделал:

  • Сначала я установил цвет линии невидимой серии на "прозрачный".
  • Затем я установил цвет заливки для невидимых маркеров серии на "прозрачный".
  • Наконец, я отключил состояние зависания для маркеров. Это предотвращает появление темных кругов подсветки при перемещении курсора мыши над каждой точкой видимой серии.

Здесь приведена измененная версия вашей оригинальной скрипки с этими изменениями: http://jsfiddle.net/brightmatrix/fDNh9/184/

series: [{
    data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
    lineColor: 'transparent',       // make the line invisible
    marker: { 
        fillColor: 'transparent',   // make the line markers invisible
        states: {
            hover: {
                enabled: false      // prevent the highlight circle on hover
            }
        }
    }
}, {
    data: [216.4, 194.1, 95.6, 54.4, 29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5]
}]

Два примечания:

  • Я использовал атрибут enableMouseTracking: false с другими невидимыми рядами, чтобы пользователи не взаимодействовали с ними (для достижения визуальных эффектов). Если вы установите это для своей невидимой серии, это предотвратит появление рядовых данных в вашей подсказке.
  • Если вы хотите сохранить свою невидимую серию в легенде, вы можете добавить атрибут showInLegend: false. Его данные будут отображаться во всплывающей подсказке.

Я надеюсь, что это поможет другим, кто сталкивается с этим вопросом.

Ответ 4

Слишком поздно для ответа, но это то, что я сделал. Постройте график и сделайте цвет прозрачным. Построить его на противоположную ось y и установить max на ноль. Установите для alignTicks значение false. Что-то вроде этого.

chart: {
        alignTicks: false,
        type: 'line'
    },

Тогда нужно только изменить значение цвета в форматировании tooltip, поскольку метка будет прозрачной.

Надеюсь, это поможет кому-то.

Счастливое обучение:)