Highcharts 的实际实践一
题记:
原先是想用chart.js 这个轻量级来完成我的需求的,结果基于我的数据不规则,所以实现不了.
我的需求:
XX后台系统会产生有些报警日志.
我负责把这些数据按照图标的方式来展示.
这写报警日志,基于时间和报警值来展示.
时间不规则,而且要实时产生和更新我的图表.
这些数据都存在于数据库中.
好了.开始进入正题.
1.首先下载两个js,一个是jquery,另外一个就是Highcharts
下载的地址:
http://www.hcharts.cn/product/download.php
2.在你的页面中引入
1 <script src="js/jquery.js"></script> 2 <script src="js/highcharts.js"></script> 3 <script src="js/exporting.js"></script>
3. 建立一个DIV
1 <div id="container" style="min-width: 310px; height: 558px; margin: 0 auto"></div>
4. 编写js,用js初始化
当然在此之前,基于本土原因,加入了语言和时间设置
1 Highcharts.setOptions({ 2 lang:{ 3 contextButtonTitle:"图表导出菜单", 4 decimalPoint:".", 5 downloadJPEG:"下载JPEG图片", 6 downloadPDF:"下载PDF文件", 7 downloadPNG:"下载PNG文件", 8 downloadSVG:"下载SVG文件", 9 drillUpText:"返回 {series.name}", 10 loading:"加载中", 11 months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"], 12 noData:"没有数据", 13 numericSymbols: [ "千" , "兆" , "G" , "T" , "P" , "E"], 14 printChart:"打印图表", 15 resetZoom:"恢复缩放", 16 resetZoomTitle:"恢复图表", 17 shortMonths: [ "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec"], 18 thousandsSep:",", 19 weekdays: ["星期一", "星期二", "星期三", "星期三", "星期四", "星期五", "星期六","星期天"] 20 }, 21 global : { 22 useUTC : false 23 } 24 });
数据要从后台取,所以在初始化属性的时候,不加数据列
1 var options = { 2 chart: { 3 renderTo:'container', 4 type:'spline', 5 }, 6 title: { 7 text: '参数监控记录', 8 x: -20 //center 9 }, 10 xAxis:{ 11 type : 'datetime', 12 title : { 13 text : "采集时间" 14 }, 15 dateTimeLabelFormats: { 16 millisecond:"%M:%S.%L", 17 second:"%H:%M:%S", 18 minute:"%d %H:%M", 19 hour:", %m-%d %H", 20 day:"%Y-%m-%d,%A", 21 week:"%A", 22 month:"%Y-%M", 23 year:"%Y" 24 }, 25 labels : { 26 enabled : true, 27 step : 2, 28 //formatter : function(){ 29 // return this.value; 30 //} 31 } 32 }, 33 yAxis: { 34 title: { 35 text: '参数值' 36 }, 37 plotLines: [{ 38 value: 0, 39 width: 1, 40 color: '#808080' 41 }], 42 min : 0, 43 max : 100 44 }, 45 series: [], 46 tooltip: { 47 headerFormat: '<b>{series.name}</b><br>', 48 pointFormat: '{point.x:%y-%m-%d %H:%M:%S.%L} : {point.y:.2f}', 49 crosshairs: [{ 50 width: 2, 51 color: 'green' 52 }, { 53 width: 2, 54 color: 'green' 55 }], 56 positioner: function() { 57 return { 58 x: 70, 59 y: 55 60 } 61 } 62 }, 63 64 credits:{ 65 enabled:true, // 版权信息 66 text:"XXXX有限公司", 67 href:"<%=basePath%>" + "home.do" 68 }, 69 70 plotOptions: { 71 spline:{ 72 dataLabels: { 73 enabled: true, 74 format : '{y:.2f}' 75 }, 76 animation:false, 77 }, 78 }, 79 };
后台代码就是定时从后台取数据
1 //初始函数,设置定时器,定时取数据 2 $(function () { 3 queryData(0); 4 5 var i=0; 6 var timer = setInterval(function(){ 7 i++; 8 if(i>=3) {i=0;} 9 queryData(i); 10 },10000); 11 12 //停止刷新 13 $("button").click(function(){ 14 clearInterval(timer); 15 }); 16 }); 17 18 var categories = []; 19 var datas = []; 20 21 //Ajax 获取数据并解析创建Highcharts图表 22 function queryData(index) { 23 $.ajax({ 24 url:"getmonitorparamgroup.do?index=" + index, 25 type:'get', 26 dataType:"json", 27 success:function(data) { 28 29 if (data === null) { 30 swal("无数据","","info"); 31 return; 32 } 33 34 //for(x in data){ 35 //options.series[x].type = data[x].type; 36 //options.series[x].data = data[x].data; 37 options.series = data; 38 //} 39 40 //$.each(data,function(i,n){ 41 // categories[i] = n[1]; 42 // datas[i] = n[2]*1; 43 //}); 44 //options.xAxis.categories = categories; 45 //options.series[0].data = datas; 46 47 chart = new Highcharts.Chart(options); 48 } 49 }); 50 }
这是上面的前台代码.后台这接受请求.组建成一定的格式.把数据负责给series就好.
posted on 2016-03-09 09:17 Sam.Richard 阅读(305) 评论(2) 编辑 收藏 举报