第二,在jsp页面的Body体中加入一个div元素,highcharts将在这个div元素中绘制曲线图。<script type="text/javascript" src="http://zhaowenbinmail.blog.163.com/blog/js/jquery-1.8.3.min.js"></script>
<script src="http://zhaowenbinmail.blog.163.com/blog/js/highcharts.js"></script>
注意:我们为这个div指定了一个id值,这个id值将来对我们很有用,它是使highcharts知道在何处绘制图表的根源。<div id="container" style="min-width: 100px; height: 400px; margin: 0 auto"></div>
<script type="text/javascript" src="http://zhaowenbinmail.blog.163.com/blog/js/chart.js"></script>现在我来讲解一下我需要实现的业务的大体需求。我需要在页面上显示大桥表面一天24小时的温度变化情况(当然这些温度值的变化本案例中都是通过随机数来产生的)。在我们的很轴方向上需要显示从0点开始到晚上23点的时间刻度,并且要求固定就显示0到23这24个刻度,在纵轴方向显示桥面传感器检测到的本小时内温度最大值,然后模拟时间推移显示每小时的温度变化曲线图。
在上面代码中我们实例化了一个Highcharts对象,并指定了此对象一些属性。在定义中我们可以看到如下代码:var chart;
$(function () { $(document).ready(function() { chart = new Highcharts.Chart({ chart: { renderTo: 'container', type: 'line', marginRight: 130, marginBottom: 80, events: { load:loadTime } }, title: { text: '大桥采集数据', x: -20 }, subtitle: { text: '传感器编号: 传感器1', x: -20 }, xAxis: { title: { enabled: true, text: '时间(小时)' }, max:23, min:0, tickPixelInterval:50 }, yAxis: { title: { text: '压力 (℃)' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] }, tooltip: { formatter: function() { return '<b>'+ this.series.name +'</b><br/>'+ this.x +': '+ this.y +'℃'; } }, legend: { x: -50, y: 10, enabled: true }, exporting: { enabled: false }, plotOptions: { line: { gapSize: 100 } }, series: [{ name: '最大值', data: getFirstData() }] }); }); });
chart: { renderTo: 'container', type: 'line', marginRight: 130, marginBottom: 80, events: { load:loadTime } }在这段代码中就知道了图表需要绘制到的div元素,注意看上面红色字体部分。这个地方的container就是jsp页面上div的id值(大家可以回过去查看一下我前面的代码)。
title: { text: '大桥采集数据', x: -20 }, subtitle: { text: '传感器编号: 传感器1', x: -20 },通过改变这里的设置可以影响图表上显示的效果,显示效果如下图红框选中部分内容。
xAxis: { title: { enabled: true, text: '时间(小时)' }, max:23, min:0, tickPixelInterval:50 }, yAxis: { title: { text: '压力 (℃)' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] },通过在xAxis、yAxis中设置title属性控制横坐标、纵坐标上的文字描述显示。
var x_arr=['0:00', '1:00', '2:00', '3:00', '4:00', '5:00', '6:00', '7:00', '8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'];通过上面代码段我们定义了一个变量,然后看看如何指定到chart对象中,请注意如下代码端中红色部门,就是较前面代码端增加的地方:
现在页面上显示的图表效果如下图所示:xAxis: { title: { enabled: true, text: '时间(小时)' }, categories:x_arr, max:23, min:0, tickPixelInterval:50 },
配置上了这个属性就能得到下图显示的效果:tooltip: { formatter: function() { return '<b>'+ this.series.name +'</b><br/>'+ this.x +': '+ this.y +'℃'; } },
egend: { x: -50, y: 10, enabled: true },只要使egend对象中的enabled属性设置为true就可以。设置为false,将不显示图例。
上面这个函数就是我们在chart对象中设置events中的load事件指定的函数。在本函数中主要启动了一个定时器,在超过指定时间计秒后,将调用函数getData。function loadTime(){ window.setTimeout(getData,TIMEOUT); }
这个函数是用来模拟初始化chart对象时,获得的大桥桥面温度值。其返回的是一个数组对象,数组中的每个对象包含x、y属性,这两个属性用来告诉chart对象x轴的某个坐标上面的y值是多少,并在此处显示一个坐标点,同时将连接相邻两个坐标点形成曲线。代码中的current_time是一个全局变量,用来对当前采集显示次数进行计数。function getFirstData(){ var data = []; var y_mx=Math.round(Math.random()*10); var i; for (i = 0; i <= 0; i++) { data.push({ x: current_time, y: y_mx }); if(current_time<=23){ current_time++; } } return data; }
function getData(){ var current_x=x_arr[current_time]; //获取最大值 var series_mx = chart.series[0]; var y_mx=Math.round(Math.random()*10); series_mx.addPoint([current_time, y_mx], true, false); current_time++; if(current_time<=23){ window.setTimeout(getData,TIMEOUT); } }上面这个函数其它部分都很简单,关键的一个重点代码是
series_mx.addPoint([current_time, y_mx], true, false);这一段,这段代码是在chart图表中加入一个新的坐标点。