Highcharts 動態圖

本章節我們將為大家介紹 Highcharts 的動態圖。

我們在前面的章節已經瞭解了 Highcharts 配置語法。接下來讓我們來看下 Highcharts 的其他配置。


每秒更新曲線圖

chart.events

chart.event 屬性中添加 load 方法(圖表加載事件)。在 1000 毫秒內隨機產生數據點並生成圖表。

chart: {
   events: {
      load: function () {
         // 圖表每秒更新一次

         var series = this.series[0];
         setInterval(function () {
            var x = (new Date()).getTime(), // 當期時間
            y = Math.random();
            series.addPoint([x, y], true, true);
         }, 1000);
      }
   }
}

實例

檔案名:highcharts_dynamic_spline.htm

<html>
<head>
<meta charset="UTF-8" />
<title>Highcharts 教學 | IT研修(xuhuhu.com)</title>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script></head>
<body>
<div id="container" style="width: 550px; height: 400px; margin: 0 auto"></div>
<script language="JavaScript">
$(document).ready(function() {
   var chart = {
      type: 'spline',
      animation: Highcharts.svg, // don't animate in IE < IE 10.
      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, true);
            }, 1000);
         }
      }
   };
   var title = {
      text: 'Live random data'
   };
   var xAxis = {
      type: 'datetime',
      tickPixelInterval: 150
   };
   var yAxis = {
      title: {
         text: 'Value'
      },
      plotLines: [{
         value: 0,
         width: 1,
         color: '#808080'
      }]
   };
   var 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);
      }
   };
   var plotOptions = {
      area: {
         pointStart: 1940,
         marker: {
            enabled: false,
            symbol: 'circle',
            radius: 2,
            states: {
               hover: {
                 enabled: true
               }
            }
         }
      }
   };
   var legend = {
      enabled: false
   };
   var exporting = {
      enabled: false
   };
   var 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 += 1) {
            data.push({
               x: time + i * 1000,
               y: Math.random()
            });
         }
         return data;
      }())
   }];

   var json = {};
   json.chart = chart;
   json.title = title;
   json.tooltip = tooltip;
   json.xAxis = xAxis;
   json.yAxis = yAxis;
   json.legend = legend;
   json.exporting = exporting;
   json.series = series;
   json.plotOptions = plotOptions;


   Highcharts.setOptions({
      global: {
         useUTC: false
      }
   });
   $('#container').highcharts(json);

});
</script>
</body>
</html>

以上實例輸出結果為:

Highcharts 餅圖Highcharts 餅圖


通過點擊添加數據

chart.events

在 chart.event 屬性中添加 click 方法(整個圖表的繪圖區上所發生的點擊事件)。該方法在圖表繪圖區上發生點擊時會添加新的數據點。

chart: {
   events: {
      click: function (e) {
         // 獲取點擊座標和數據項
         var x = e.xAxis[0].value,
         y = e.yAxis[0].value,
         series = this.series[0];
         // 添加點擊的座標

         series.addPoint([x, y]);
      }
   }
}

實例

檔案名:highcharts_dynamic_click.htm

<html>
<head>
<title>Highcharts 教學 | IT研修(xuhuhu.com)</title>
   <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
   <script src="/try/demo_source/highcharts.js"></script>
</head>
<body>
<div id="container" style="width: 550px; height: 400px; margin: 0 auto"></div>
<script language="JavaScript">
$(document).ready(function() {
   var chart = {
      type: 'scatter',
      margin: [70, 50, 60, 80],
      events: {
         click: function (e) {
            // find the clicked values and the series
            var x = e.xAxis[0].value,
            y = e.yAxis[0].value,
            series = this.series[0];
            // Add it
            series.addPoint([x, y]);
         }
      }
   };
   var title = {
      text: 'User supplied data'
   };
   var subtitle = {
      text: 'Click the plot area to add a point. Click a point to remove it.'
   };
   var xAxis = {
      gridLineWidth: 1,
      minPadding: 0.2,
      maxPadding: 0.2,
      maxZoom: 60
   };
   var yAxis = {
      title: {
         text: 'Value'
      },
      minPadding: 0.2,
      maxPadding: 0.2,
      maxZoom: 60,
      plotLines: [{
         value: 0,
         width: 1,
         color: '#808080'
      }]
   };
   var legend = {
      enabled: false
   };
   var exporting = {
      enabled: false
   };
   var plotOptions = {
      series: {
         lineWidth: 1,
         point: {
            events: {
               'click': function () {
                  if (this.series.data.length > 1) {
                     this.remove();
                  }
               }
            }
         }
      }
   };
        
   var series= [{
      data: [[20, 20], [80, 80]]
   }];

   var json = {};
   json.chart = chart;
   json.title = title;
   json.subtitle = subtitle;
   json.xAxis = xAxis;
   json.yAxis = yAxis;
   json.legend = legend;
   json.exporting = exporting;
   json.series = series;
   json.plotOptions = plotOptions;
   $('#container').highcharts(json);

});
</script>
</body>
</html>

以上實例輸出結果為: