Подсветка общего элемента всплывающей подсказки в зависимости от наведенной серии в Highcharts

У меня есть следующая диаграмма: http://jsfiddle.net/5oso60oq/

JS :

$(function () {
    $('#container').highcharts({
        chart: {
            type: 'bar'
        },
        title: {
            text: 'Stacked bar chart'
        },
        xAxis: {
            categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas']
        },
        yAxis: {
            min: 0,
            title: {
                text: 'Total fruit consumption'
            }
        },
        legend: {
            reversed: true
        },
        tooltip: {
        	shared: true
        },
        plotOptions: {
            series: {
                stacking: 'normal'
            }
        },
        series: [{
            name: 'John',
            data: [5, 3, 4, 7, 2]
        }, {
            name: 'Jane',
            data: [2, 2, 3, 2, 1]
        }, {
            name: 'Joe',
            data: [3, 4, 4, 2, 5]
        }]
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>

<div id="container" style="min-width: 310px; max-width: 800px; height: 400px; margin: 0 auto"></div>

Что я хотел бы сделать, так это выделить (или изменить стиль) элемент серии всплывающей подсказки в зависимости от наведенной серии на диаграмме.

Например, если я наведу курсор на зеленую область в серии диаграмм «Яблоки», я хотел бы выделить «Джо» во всплывающей подсказке и так далее...

Я нашел несколько советов с событиями наведения в серии, но они плохо отображаются.


person Maxime Lafarie    schedule 13.04.2016    source источник


Ответы (3)


Вы должны отключить общий параметр и использовать средство форматирования, которое позволяет перебирать все серии и точки. Добавьте условие, которое проверяет текущее значение x и точки печати.

tooltip: {
  shared: false,
  formatter: function() {
    var series = this.series.chart.series,
      each = Highcharts.each,
      x = this.point.x,
      txt = '<span style="font-size: 10px">' + this.key + '</span><br/>';


            each(series, function(serie,i) {
        each(serie.data, function(data, j){
        if(data.x === x) {
            txt += '<span style="color:' + data.color + '">\u25CF</span> ' + serie.name + ': <b>' + data.y + '</b><br/>';
        }
      });
    });

    return txt;

  }
},

Пример: - http://jsfiddle.net/fsfyq89p/

person Sebastian Bochan    schedule 14.04.2016

ссылка

      tooltip: {
        pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
      }

Попробуй это

person Zubair sadiq    schedule 13.04.2016
comment
Это не тот результат, который я ищу, я хочу сохранить «общий»: true в объекте всплывающей подсказки. - person Maxime Lafarie; 13.04.2016

Я искал то же самое и нашел лучшее решение, я думаю

formatter(tooltip) {
  // sort the values
  // eslint-disable-next-line no-nested-ternary
  this.points.sort((a, b) => ((a.y < b.y) ? -1 : (a.y > b.y) ? 1 : 0))
    .reverse()
  tooltip.chart.series.forEach((item) => {
    if (!item.state) item.setState('inactive')
  })
  return tooltip.defaultFormatter.call(this, tooltip)
},

https://jsfiddle.net/h3ar4yen/

person Hesy Ra    schedule 06.04.2020