2013-10-07 3 views
2

Можно ли удалить определенные очки из серии? Я ищу способ рисовать график с фиксированным периодом времени, что-то вроде: последние 1 час.Highcharts - удалить очки из серии

Я знаю, как добавить точки с помощью динамического обновления:

http://www.highcharts.com/demo/dynamic-update

Но в моем случае интервал времени между точками не является постоянной величиной, , так что я не могу просто использовать параметр сдвига addPoint.

Спасибо, Омер

ответ

3

Если вы хотите иметь то же самое, вы можете использовать ту же логику, что и в addPoint см: http://jsfiddle.net/JKCLx/1/

Однако, почему вы не можете просто использовать shift аргумент в addPoint() ?

+0

Спасибо, ваше решение работает, но я этого не понимаю, так что, пожалуйста, проясните немного? аргумент shift означает, что для каждой добавляемой точки я удаляю другую, но если временной интервал между точками в не константе, эта логика неверна. Так что мне действительно нужна функция removePoint(), которая не приводит к тому, что серия будет полностью перерисована. –

+0

Что вы имеете в виду, если не полностью перерисовать? Вы можете или перерисовать или нет, также вы не можете просто вырезать часть диаграммы при удалении точки. Да, сдвиг работает таким образом, поэтому, когда новая точка добавлена, удалите последнюю. Как насчет добавления еще одной точки в диаграмму, которая будет находиться за пределами области графика, и удалить эту точку, когда придет новый? Или может быть такое же число, как видимые точки, поэтому нерегулярный интервал не будет проблемой, я думаю. –

0

Я думаю, что нашел частичный ответ на мой собственный вопрос:

Я итерация над точками данных серии, как это:

http://api.highcharts.com/highcharts#Series.data

и затем вызвать point.Remove.

Проблема с этим решением заключается в том, что он не рисует стиль монитора, как в примере, , а скорее всего красный график всей диаграммы при каждом изменении.

http://jsfiddle.net/JKCLx/

$(function() { 
    $(document).ready(function() { 
     Highcharts.setOptions({ 
      global: { 
       useUTC: false 
      } 
     }); 

     var chart; 
     $('#container').highcharts({ 
      chart: { 
       type: 'spline', 
       animation: Highcharts.svg, // don't animate in old IE 
       marginRight: 10, 
       events: { 
        load: function() { 

         // set up the updating of the chart each second 
         var series = this.series[0]; 
         setInterval(function() { 
          var x = (new Date()).getTime(), // current time 
           y = Math.random(); 
          series.addPoint([x, y], true, false);       
          // series.data[0].remove(false); 
          series.data[0].remove(true); 
         }, 1000); 
        } 
       } 
      }, 
      title: { 
       text: 'Live random data' 
      }, 
      xAxis: { 
       type: 'datetime', 
       tickPixelInterval: 150 
      }, 
      yAxis: { 
       title: { 
        text: 'Value' 
       }, 
       plotLines: [{ 
        value: 0, 
        width: 1, 
        color: '#808080' 
       }] 
      }, 
      tooltip: { 
       formatter: function() { 
         return '<b>'+ this.series.name +'</b><br/>'+ 
         Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) +'<br/>'+ 
         Highcharts.numberFormat(this.y, 2); 
       } 
      }, 
      legend: { 
       enabled: false 
      }, 
      exporting: { 
       enabled: false 
      }, 
      series: [{ 
       name: 'Random data', 
       data: (function() { 
        // generate an array of random data 
        var data = [], 
         time = (new Date()).getTime(), 
         i; 

        for (i = -19; i <= 0; i++) { 
         data.push({ 
          x: time + i * 1000, 
          y: Math.random() 
         }); 
        } 
        return data; 
       })() 
      }] 
     }); 
    }); 

}); 
+0

В точке remove() вы можете перерисовать как false и установить true только при последнем удалении(). Затем анимация/перерисовка будет вызываться один раз. –

+0

Да, но это все еще не дает такой же анимации, как и сдвиг, посмотрите на прикрепленный jsfiddle. Все очки перерисовываются. –

Смежные вопросы