`
Everyday都不同
  • 浏览: 725165 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

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

    博客分类:
  • jsp
阅读更多

【若要转载  请标明出处  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为对象属性赋值和取值的规则~~~~~~~~

 

效果(某一时刻):



 

画图完毕。

  • 大小: 31.6 KB
3
0
分享到:
评论
1 楼 Barbossa- 2015-11-27  
大哥 你的 xxxx/yyyyy.json不符合命名规范吧  有没有更完整点的说明啊 求教

相关推荐

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

    本教程将探讨如何在Java后端与前端使用Highcharts和Ajax结合,动态地从服务器获取数据并更新图表。 一、Highcharts的基本概念与使用 Highcharts是基于HTML5 SVG的图表库,支持现代浏览器和IE6+(通过VML)。它提供...

    Highcharts AJAX后台JAVA JSON 曲线报表完美可运行例子 不包含官方JS 自己下载

    在这个"Highcharts AJAX后台JAVA JSON 曲线报表完美可运行例子"中,我们将探讨如何结合Java后端和JSON数据格式,通过AJAX技术在网页上展示动态曲线报表。 首先,`index_lineAjax.htm`是前端HTML文件,它包含了...

    HighCharts开发实例+教程

    HighCharts 图表属性——chart HighCharts 颜色属性——colors HighCharts 版权属性——credits HighCharts 去除版权的几种方法 HighCharts 导出属性——explorting HighCharts HTML标签——labels HighCharts 语言...

    highcharts导出图片的后台代码

    highcharts导出图片的后台代码,这样就不用从highcharts官网服务器上进行图片导出了,成了一个本地的服务器!

    highcharts 动态指定 x y数据

    动态指定X和Y数据是Highcharts的一个常见需求,尤其是在处理实时数据或者用户交互时。本文将深入探讨如何在Highcharts中实现这一功能。 一、理解Highcharts的数据结构 在Highcharts中,数据通常是以数组的形式表示...

    jQueryhighcharts(动态js统计图表).rar

    而jQuery和Highcharts的结合使用,为开发者提供了强大的工具来创建交互式的、动态的统计图表。本篇文章将深入探讨jQuery与Highcharts的集成以及它们在构建统计图表中的应用。 Highcharts是一款优秀的JavaScript图表...

    highcharts读后台php,生成实时动态图表

    结合PHP后端,Highcharts能够实现从服务器获取实时数据,进而生成动态图表,这对于构建实时监控系统或者实时交易系统的前端界面非常有用。 在"highcharts读后台php,生成实时动态图表"的场景中,PHP作为后端语言...

    highChart后台动态获取数据

    在"highChart后台动态获取数据"这个主题中,我们主要探讨如何利用HighCharts结合后端数据来创建动态图表。 1. **HighCharts基本结构与配置** HighCharts的基本结构包括一个HTML容器元素和JavaScript代码,用于初始...

    highcharts动态开发实例

    总的来说,这个实例展示了如何将数据库中的数据与Highcharts结合,创建动态的数据可视化应用。开发者可以借此学习如何处理动态数据源,以及如何利用PHP和MySQL构建后端服务来支持Highcharts的动态更新。同时,通过...

    jquery highcharts动态加载多条数据表走势图代码

    jquery highcharts动态加载多条数据表走势图代码 jquery highcharts动态加载多条数据表走势图代码 jquery highcharts动态加载多条数据表走势图代码

    highcharts后台数据交互及各种常用设置配置

    highcharts的常用配置,后台数据的交互。数据的下钻,已经导出相关配置,返回按钮配置。堆叠图,加折线图,展示环比增量。包含内容丰富,

    highcharts实现从mysql数据库获取数据生成折线图

    本篇将详细介绍如何利用Highcharts结合MySQL数据库,实现在Web应用中动态生成折线图。 首先,我们需要了解Highcharts的基本使用。Highcharts是一个轻量级的图表库,它提供了丰富的API和配置选项,可以自定义图表...

    Highcharts在Java后台导出图片到PDF和EXCEL文件中示例代码

    Highcharts在Java后台导出图片到PDF和EXCEL文件中示例代码,程序放到MyEclipse8.6中编译后可直接放到Tomcat6及以上版本运行,程序中含有jar包,下载后不用操心到处找jar包,在MyEclipse8.6里建立普通的Web工程就可以...

    highcharts快速生成百万数据点折线图.rar

    Highcharts是一款广泛应用于Web开发中的JavaScript图表库,它能够帮助开发者轻松创建各种动态、交互式的图表,包括折线图、柱状图、饼图等多种类型。在处理大数据量时,Highcharts提供了高效的优化策略,使得即使...

    Highcharts动态实现报表

    4. **动态更新数据**:Highcharts支持动态更新图表数据,这对于实时报表或响应用户操作非常有用。可以使用`chart.series[0].addPoint()`方法向已有数据系列添加新点,或者`chart.series[0].setData()`来替换整个数据...

    highcharts封装 刷新 重绘 方法代码

    在处理动态数据或者需要更新图表的情况下,我们可能需要对Highcharts进行刷新或重绘。本文将深入讲解Highcharts的封装、刷新和重绘方法,并提供相关代码示例。 ### 1. Highcharts的封装 封装Highcharts是为了更好...

    Highcharts与ExtJs结合使用

    本文将深入探讨如何将Highcharts与ExtJS结合使用,以实现更高效、更美观的数据呈现。 首先,Highcharts是一个强大的JavaScript图表库,它支持各种类型的图表,包括折线图、柱状图、饼图、散点图等。Highcharts以其...

    关于HighCharts无法传入数据

    HighCharts是一款广泛应用于Web开发中的JavaScript图表库,用于创建各种数据可视化效果,如柱状图、折线图、饼图等。在使用HighCharts时,可能会遇到无法正确传入数据的问题,这通常与数据格式、JavaScript语法错误...

Global site tag (gtag.js) - Google Analytics