Highcharts之动态刷新——结合后台数据

【若要转载  请标明出处  http://raising.iteye.com/blog/2214779

 

最近要求做前台的一些东西,用到了Highcharts。。其实在Highcharts中文网上有相应的演示demo,一般你所需要的图的样式都可以找到。难点在于实际开发中,需要的数据往往是要结合后台请求并响应的数据的。

附Highcharts中文网:

http://www.hcharts.cn/demo/index.php

 

而我这次做的是趋势图,涉及到动态刷新,做的过程还是花了一番功夫的,也补充和巩固了一点js的知识,为了纪念,把过程记录一下:

 

首先,是引入HIghcharts绘图相关的js文件和jQuery.js。

接下来,把HIghcharts动态刷新的格式拷贝并作修改:

 

	$(function(){
		$(document).ready(function() {
			
			Highcharts.setOptions({
				global: {
					useUTC: false//是否使用世界标准时间
				}
			});
			
			var chart;
			chart = new Highcharts.Chart({
				chart: {
					renderTo: 'container',
					type: 'spline',
					marginRight: 10,
					events: {
						load: function() {
							 var series = this.series;
                             setInterval(function() {
                            	 var result = reload();
                            	 var x = result.time;
                            	 for(var i=0; i<series.length; i++) {
                            		 var y = result.y[i];
                            		 series[i].addPoint([x, y], true, true);
                            	 }
                             }, 1000*5);
						}
					}
				},
				
                title: {
                    text: 'ssssss'
                },
                xAxis: {
                    type: 'datetime',
                    tickPixelInterval: 150,
                    tickInterval: 60 * 1000
                },
                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: {
    				layout: 'vertical',
    				align: 'right',
    				verticalAlign: 'top',
    				borderWidth: 0
            },
                exporting: {
                    enabled: false
                },
               
                series: create()
			});
		});
	});

 

注意属性:global: {    useUTC: false }是很重要的,对于我们在中国地区使用的系统而言,如果你这个设置为true或者不设置的话,会莫名其妙少了8个小时。因为如果你不设置为false,则是以世界标准时区为准,而由于中国所在时区为+8,所以经过 Highcharts 的处理后会减去8个小时。——这也是会偶尔出现的比较难以发现的问题。。(我就遇到了这个问题,一直在highcharts的dateFormat上找问题,搞了好久才发现这个问题~~~~)

 

 重点是chart里面的event属性,series属性。注意,此时:series属性是一个js函数的返回值,需用“js函数名()”来取得。

 

而demo里面,series是这样的:

 

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;                                                    
                })()                                                                
            }] 

 

 

这是死数据,并且只显示一条曲线(或折线)。我们需要得到后台数据,并且x,y的值都需要由后台决定。

create()方法的定义如下:

 

function create() {
		var series = new Array();
		
		$.ajax({
			type: "POST",
			url: "xxxx/yyyyy.json",
			async: false, //表示同步,如果要得到ajax处理完后台数据后的返回值,最好这样设置
			success: function(result){
				var ccc = result.key;
				var size = ccc.length;
				for(var i=0; i<size; i++) {
					var name = ccc[i].yyyy;
					var perTotalCnt = ccc[i].xxxx;
					var data = function() {
						var data = [],
							time = result.time,
							i;
						for(i=-6; i<=0; i++) {
							data.push({
								x: aaaa,
								y: zzzz
							});
						}
						
						return data;
					}();
					series.push({"name": name, "data": data});
				}
			}
		}); 
		alert(series);
		return series;
		
	}

 

 1)其中,series.push({"name": name, "data": data});这一行就是在往series数组[]中push数据,从而生成格式中需要的series数组;

注意series是一个json的数组,哪怕你只有一个series,也是一个长度为1的数组。如:

function create() {
		var series = {};
		 series.name = '个数';
    	 series.data =  [{'x':1448887500000,'y':50},{'x':1448887620000,'y':30},{'x':1448887680000,'y':31},{'x':1448887740000,'y':20},{'x':1448887800000,'y':20},{'x':1448887860000,'y':33},{'x':1448887920000,'y':39}];
		 var data = [];
		 data[0] = series;
		 return data;
}

 2)xAxis的tickInterval: 60 * 1000属性,表明x轴的显示间隔为分钟(单位为ms),前提是你指定xAis的type: 'datetime',这个属性决定了x轴显示的数据格式,如你指定为1分钟时,显示的是20:45,20.46,20:47等,同时也决定了显示的个数;

3)当你指定xAis的type为datetime时,point的x值是long值的毫秒数,表示从1970年01月01日00:00:00:000至今为止的毫秒数。

4)当出现Highcharts Errors #19的错误时,请检查加载时x轴的点个数是否超过999个(最高限制);x轴上的两个点的时间间隔是否太大。

 

而这一部分:

events: {
						load: function() {
							 var series = this.series;
                             setInterval(function() {
                            	 var result = reload();
                            	 var x = result.time;
                            	 for(var i=0; i<series.length; i++) {
                            		 var y = result.y[i];
                            		 series[i].addPoint([x, y], true, true);
                            	 }
                             }, 1000*5);
			}
}

 则是每隔一段时间(1000*5=5s)刷新页面数据,并且通过循环生成多条"曲线"。其中reload()也是一个js函数的返回值:注:定义json对象的方法var json = {"key1": value1, "key2":value2} (reload方法就不贴了,也是通过ajax请求后台,得到相应数据并且处理相应数据后,放到一个数据结构或json对象中)。

 

 

其实,highcharts绘制chart也是典型的jquery语法·,所以我们取一个已经存在的highcharts对象时,可以直接用$("#divId").highcharts()即可,这符合Highcharts为对象属性赋值和取值的规则~~~~~~~~

 

效果(某一时刻):



 

画图完毕。

HighCharts动态数据刷新 最近项目用到制表的功能,也就接触到了HighCharts这个工具。说是工具,其实我个人感觉他就是一个第三方的包而已。如果单机使用就得下好她的包然后引用本队路径,如果想用网络的话就用   引用如上两行。具体怎么用HighCharts表大家可以上官网查看http://www.hcharts.cn/docs/index.php。我这里只是写一个从外部导入一个json文件生成数据制成 阅读详情

相关推荐

HighCharts定时刷新图表

创建HighCharts动态刷新图表,并能实现曲线、趋势线从右向左的推进效果

甘焕的博客 8132

java实现的highchartsajax结合动态实时获取数据更新图表

java实现的highchartsajax结合动态实时获取数据更新图表

Highcharts通过AJAX访问后台数据库实时刷新

最近项目中要做一个实时人流量的折线统计图,接触了下Highcharts在网上看了很多博客和官方API,总结出一下代码。$(function () { var chart = Highcharts.chart('flot-line-chart-moving', { credits:{ enabled:false // 禁用版权信息 },

qq_34905123的博客 8625

Highcharts动态刷新图表

/** * 加载动态刷新图表 * * @param id * 图表所在div的id * @param title * 图表标题文字 * @param yTitle * 图表y轴显示的文字 * @param seriesName * 鼠标悬停到图表中的点时显示的名称 * @param val

SunVee's Blog 1540

highcharts实时刷新曲线图,动态修改Y轴的最大最小值

Highcharts.setOptions({ global: { useUTC: false } }); //最大最小值初始化var intMinmun = 2; var intMaxmun = 10; function activeLastPointToolip(chart) { var points = chart.series[0].points; chart.tooltip.refresh(points[points.length -1]); ...

csdnxyy的博客 2074

关于highcharts的封装和刷新

前言: 很气愤,在更改不知道被改过几手的代码.惨不忍睹.之前做这块的一个小家伙年前跑路了~留下这一烂摊子,重复代码量多的很想有种全部删除重写的冲动.可考虑我还有其他任务在身,只好作罢.在原先基础上尽可能的修复。 --------------- ----------------------------------------------------------------------------

hanqing 3762

highcharts 实时动态刷新曲线图

function create() { var series = new Array(); $.ajax({ type: "post", url: url, data: {}, async: false, dataType: "JSON", success: function (dat...

掐指一算乀缺钱 1151

java ajax动态加载数据_java实现的highchartsajax结合动态实时获取数据更新图表

java实现的highchartsajax结合动态实时获取数据更新图表博客分类:javajspjavajsphighchartsajax实时刷新Highcharts Example//x轴值var categories=;//y轴值var data=;//创建图表var chart;$(document).ready(function() {chart = new Highcharts.Char...

weixin_42393261的博客 291

HighCharts趋势图动态设置Series数组(根据后台决定具体几个data), 并动态刷新数据

最近要做一些前台的数据展示, 用到了HighCharts.我这次做的是趋势图,涉及到series数组动态设置, 动态刷新 . 为了便于记忆,在这里记录一下。

CHEN的技术积累 2万+

HighChartsAjax结合动态更新图表数据教程

HighCharts是一个流行的JavaScript图表库,提供多种图表类型的创建和配置选项,以直观、交互性强的方式展示数据。它非常适合Web开发人员和前端设计师,用来构建丰富多样的数据可视化图表。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个页面的情况下,能够更新部分网页的技术。它不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。

weixin_42466857的博客 416

jquery结合highcharts使用Ajax异步刷新数据

Highchart是比较流行的一款图形插件,可以生成常用的饼图、拆线图、柱状图,图形界面也比较美观。官网上也提供了一引demo,但是如何使用json给Hightcharts各部分赋值,我选择了用ajax来请求action,然后得到json给Highchart赋值。 具体主要代码如下: 原demo: $(function () {        $

huwenzhi1991的专栏 5476

Highcharts动态取值,刷新数据的解决方案

今天做项目在Highcharts刷新死活找不到有效的解决方案,只能自己研究了,查看API之后,经过N次测试,终于通过了,先将代码贡献出来,帮助大家解决类似问题 for(var j=0;j<cate.length;j++){ chart.xAxis[0].categories.push(cate[j]); } chart.series[0].setData(inc); chart.red

Zhengw博客专栏 2万+

Java结合HighchartsAJAX动态实时更新图表实践指南

实时数据采集需要高效地从源头获取信息,支持各种传感器、日志文件、用户操作事件等数据源。这种采集过程通常涉及异步数据处理技术,如Node.js的事件循环机制,或者使用专用的数据收集服务如Apache Kafka。示例代码:使用Node.js采集实时数据// 这里可以使用传感器数据或者业务事件的实时数据上述Node.js服务器示例,通过HTTP协议提供一个简单的数据源接口。这个接口模拟了从某传感器实时采集的数据

weixin_30415591的博客 457

highcharts动态刷新数据,得先清空上一个数据,不然会出现前一个图形和新数据的图形重合

// 实例化chart对象 function newChart(obj, container, title) {  return new Highcharts.Chart( {   // $('#container1').highcharts({   chart : {    renderTo : container,    type : 'line'   },   title :

ryan1214的专栏 7495

highcharts 动态刷新图标多个曲线

Highcharts.setOptions({ global: { useUTC: false } }); function activeLastPointToolip(chart) { var points = chart.series[0].points; chart.tooltip.refresh(points[points.length -1]); } var chart = Highcharts.chart('container_change', .

zcg359670476的博客 553

使用JQuery结合HIghcharts实现从后台获取JSON实时刷新图表

1.Js代码 'text/javascript' src='js/jquery-1.3.2.js'>   'text/javascript' src='js/highcharts.js'>   'text/javascript'>       //       $(function(){                    //声明报表对象

mutaomutao的专栏 1516

django highcharts通过ajax实现局部图表刷新

在网页中插入highcharts图表,图表数据来自后台mysql数据库。通过该网页提交的参数使highcharts图表更新。对此,图表刷新需通过ajax,局部刷新,并保持网页的设置参数不改变。全网页刷新会导致网页恢复到初始的静态网页,对网页变化的参数设置将全部丢失。 1 highcharts图表初始化 当网页加载初始化时,将触发highcharts初始化代码。django框架下,由url触发的views函数会提交图表输入数据。 $(document).ready(function() { // jQuer

白起 780
上一篇: redis主从复制之linux环境配置
下一篇: org.apache.el.parser.ParseException: Encountered " ":" ": "" at line 1, column 1
z2012c
博客等级 码龄14年 28粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值