Скрыть все, кроме выбранных рядов данных, диаграммы высокого уровня

#jquery #highcharts

#jquery #диаграммы верхних уровней

Вопрос:

У меня есть несколько линейных графиков с использованием Highcharts, и мне нужно скрыть все, кроме ряда данных, выбранного пользователем. Пример страницы можно найти по адресу http://opheliadesign.com/weight .

Например, в разделе «Состав тела» при нажатии на жир будут скрыты кости, вода и ИМТ, что позволит более легко просматривать график жировых отложений.

Спасибо!

Ответ №1:

Я не верю, что highcharts имеет hideAll() или подобную функцию, но вы могли бы попробовать что-то вроде этого:

 //assuming chart is your chart
series = chart.series;
for(var i = 0; i < series.length; i  ) {
    if(!series[i].selected) {
        series[i].hide();    //Hide the series
    }
}
  

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

Комментарии:

1. Единственным недостатком является то, что при большом количестве рядов с сотнями точек скрывание сильно затягивается.

Ответ №2:

Довольно старая тема, но информация по-прежнему полезна.

Как указал @Alvara, при сотнях серий использование .hide() or .show() происходит довольно медленно (браузер зависает на несколько секунд).

Использование setVisible(false, false) и setVisible(true, false) намного быстрее :

 legendItemClick: function (event) {
  if (!this.visible) return true;

  const series = this.chart.series;
  const serieLen = series.length;

  if (series.filter(s => s.visible).length === 1) {
    for (let i = 0; i < serieLen; i  = 1) {
      series[i].setVisible(true, false);
    }
  } else {
    for (let i = 0; i < serieLen; i  = 1) {
      series[i].setVisible(false, false);
    }
    series[this.index].setVisible(true, false);
  }
  return false;
};
  

Даже с большими рядами это работает мгновенно.

Использование .show().hide() для 50 рядов уже занимает более 2 секунд для переключения видимых рядов (https://jsfiddle.net/rockshappy/nL5j2rLa/5 /)

Здесь использование setVisible происходит мгновенно (https://jsfiddle.net/rockshappy/nL5j2rLa/2 /)

Комментарии:

1. Идеальный. Очень быстро! Именно то, что я искал