`
coolboy09
  • 浏览: 7917 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

highcharts动态曲线的实现

 
阅读更多

       Highcharts是一个非常成熟的绘制图表的前端库,由纯JS编写。能够很方便的在实际项目中添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。目前HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。

       HighCharts的UI设计非常优美,由于使用纯JS编写,所以不需要像Flash和Java那样需要插件才可以运行,而且运行速度较快。最重要的是,HighCharts还有很好的兼容性,能够兼容当前主流的浏览器。详细的文档,可以参考:www.highcharts.com.

       下面,我将分享使用highcharts在实际项目中绘制动态曲线图的例子,先上代码:

QtAvgCostChartPanel = function() {
	this.plot;
	var scope = this;
	//获取Provider(应用名)
	var appArr2store = buildCombo.getApp();
	//当Provider App默认值为search时,按search加载Service Name、Service MethodName及providerHost默认的下拉框列表
	//获取ProviderHost
	var providerArr2store = buildCombo.getProvider('search');
	//获取service(服务名)
	var serviceArr2store = buildCombo.getService('search');
	//初始化service methodName(服务方法名)
	var methodArr2store =  new Ext.data.ArrayStore({
		fields:['methodName','methodName']
	}); 
	this.toolBar = [ '-', 'Provider App:', {
		id : 'providerApp_QtAvg',
		xtype : 'combo',
		width : 155,
		listWidth : 200,
		value : 'search',//设置默认值
		store : appArr2store,
		valueField : 'appCode',
		displayField : 'appCode',
		selectOnFocus : true,
		mode : 'local',
		triggerAction : 'all',
		listeners:{
			'select': function(){
				//选择App的值,可以级联确定service及providerHost下拉框列表
				var appValue = this.getRawValue();
				Ext.getCmp('providerHost_QtAvg').store.removeAll(); //清除缓存数据
				Ext.getCmp('serviceName_QtAvg').store.removeAll(); //清除缓存数据
				Ext.getCmp('serviceMethodName_QtAvg').store.removeAll(); //清除缓存数据
				//当重新选择时,清空各下拉框显示值及原始值
				Ext.getCmp('serviceName_QtAvg').clearValue();
				Ext.getCmp('serviceMethodName_QtAvg').clearValue();
				Ext.getCmp('providerHost_QtAvg').clearValue();
				//获取service(服务名)
				var serviceArr2store = buildCombo.getService(appValue);
				//重新加载数据(local)
				Ext.getCmp('serviceName_QtAvg').store.loadData(serviceArr2store);
				//获取ProviderHost
				var providerArr2store = buildCombo.getProvider(appValue);
				//重新加载数据(local)
				Ext.getCmp('providerHost_QtAvg').store.loadData(providerArr2store);
				scope.query();
			}
		}
	}, '-','Provider Host:', {
		id : 'providerHost_QtAvg',
		xtype : 'combo',
		width : 155,
		listWidth : 180,
		store : providerArr2store,
		valueField : 'hosts',
		displayField : 'hosts',
		selectOnFocus : true,
		mode : 'local',
		triggerAction : 'all',
		listeners:{
			'select': function(){
				scope.query();
			}
		}
	}, '-','Service Name:', {
		id : 'serviceName_QtAvg',
		xtype : 'combo',
		width : 155,
		listWidth : 280,
		store : serviceArr2store,
		valueField : 'service',
		displayField : 'service',
		selectOnFocus : true,
		mode : 'local',
		triggerAction : 'all',
		listeners:{
			'select': function(){
				var appValue = Ext.getCmp('providerApp_QtAvg').getRawValue();
			    var selectedValue = this.getRawValue();
			    Ext.getCmp('serviceMethodName_QtAvg').store.removeAll(); //清除缓存数据
			    //当重新选择时,清空各下拉框显示值及原始值
			    Ext.getCmp('serviceMethodName_QtAvg').clearValue();
			    //获取service nameMethod(服务方法名)
			    var methodArr2store = buildCombo.getServiceMethod(appValue,selectedValue);
			    //重新加载数据(local)
				Ext.getCmp('serviceMethodName_QtAvg').store.loadData(methodArr2store);
				scope.query();
			}
		}
	}, '-','Service MethodName:', {
		id : 'serviceMethodName_QtAvg',
		xtype : 'combo',
		width : 155,
		listWidth : 420,
		store : methodArr2store,
		valueField : 'methodName',
		displayField : 'methodName',
		selectOnFocus : true,
		mode : 'local',
		triggerAction : 'all',
		listeners:{
			'select': function(){
				scope.query();
			}
		}
	}, '-',{
		iconCls : 'ms-query',
		xtype : 'button',
		text : "查找",
		handler : this.query,
		scope : this
	}];
	this.reportPanel = new Ext.BoxComponent(
			{
				border : false,
				autoEl : {
					tag : 'div',
					html : "<div id='QtAvgCostChartDiv' style='width:80%;height:90%;'></div>"
				},
				anchor : 'none -24'
			});

	QtAvgCostChartPanel.superclass.constructor.call(this, {
		id : 'QtAvgCostChart',
		title : '平均耗时',
		margins : '0 0 5 5',
		cmargins : '0 5 5 5',
		closable : true,
		tbar : this.toolBar,
		bbar : this.bottomBar,
		layout : 'fit',
		autoScroll : true,
		items : [this.reportPanel],
		listeners : {
			'beforedestroy' : function(){
				clearInterval(this.reVal);
			}
		}
	});
};

Ext.extend(QtAvgCostChartPanel, Ext.Panel, {
	query : function() {
		var param = {
			providerApp : Ext.getCmp("providerApp_QtAvg").getRawValue(),
			providerHost : Ext.getCmp("providerHost_QtAvg").getRawValue(),
			serviceName : Ext.getCmp("serviceName_QtAvg").getRawValue(),
			serviceMethodName : Ext.getCmp("serviceMethodName_QtAvg").getRawValue()
		};
		clearInterval(this.reVal);
		this.draw("quarterAnalystService", "getMemoMinsAvgCost" , param);
	},
	init : function() {
		this.draw("quarterAnalystService", "getMemoMinsAvgCost" , {});
	},
	draw : function(service, method ,param){
		var me = this;
		Highcharts.setOptions({
			global : {
				useUTC: false
			}
		});
		var chart, 
		    maxMinData = {},
		    params = Ext.encode({s : service, m : method, p : param});
		$('#QtAvgCostChartDiv').highcharts({
			chart : {
				type: 'spline',
				animation: Highcharts.svg, // don't animate in old IE
				marginRight: 10,
				events : {
					load : function(){
						var series = this.series[0];
						var loadData = function(){
							maxMinData = {};
							$.ajax({
								type : "post",
								url : "ajax.do",
								data : {rmi : params},
								async : false,
								success : function(response){
									if(!Ext.isEmpty(response)){
										var xdata = response['xdata'],
									        ydata = response['ydata'],
									        others = response['others'];
									    for(var i = 0, len = xdata.length; i<len; i++){
											maxMinData[xdata[i]] = others[i];//保存最大值最小值
											var x = xdata[i], y = ydata[i];
											var isShift = series.data.length >= 15;//防止数据过大,造成浏览器崩溃
											series.addPoint([x,y], true, isShift);
										}
									}
								}
							});
						}
						loadData();//首次加载数据
						me.reVal = setInterval(loadData, 30000);//动态获取数据,并保存返回值
					}
				}
			},
			title : {
				text: '平均耗时实时监控'
			},
			xAxis : {
				type: 'category'
			},
			yAxis : {
				title : {
					text : '平均耗时/ms'
				},
				min : 0,
				plotLines : [{
					value : 0,
					width : 1,
					color: '#808080'
				}]
			},
			tooltip : {
				formatter : function(){
					var max_min = maxMinData[this.point.name] && maxMinData[this.point.name].split(',');
					if(!max_min){
						return '<b>'+ this.series.name +
			                	'</b><br/>'+this.point.name+
			                	'<br />'+'平均值 :'+this.y +
			                	'<br />'+'最大值 :'+ 0 +
			                	'<br />'+'最小值 :'+ 0 ;
					}
					return '<b>'+ this.series.name +
		                	'</b><br/>'+this.point.name+
		                	'<br />'+'平均值 :'+this.y +
		                	'<br />'+'最大值 :'+max_min[0]+
		                	'<br />'+'最小值 :'+max_min[1];
				}
			},
			legend : {
				enabled : false
			},
			exporting : {
				enabled : false
			},
			credits : {
				enabled : false
			},
			series : [{
				name : '平均耗时',
				data : []
			}]
		});
	}
});

Ext.reg("QtAvgCostChart", QtAvgCostChartPanel);

 上面是一个平均耗时的代码,使用了Extjs,关键的绘图代码是方法draw : function(service, method ,param){},在load事件中,使用了jquery的ajax方法同步取数据,因为后面要用到这些数据,故而使用了同步方法。其中:

var isShift = series.data.length >= 15;//防止数据过大,造成浏览器崩溃

 这里是因为每次均获取15分钟的数据,故此,当图中数据大于15个,将会删除最前面的数据点。动态加载的方法是loadData,每半分钟刷新一次。效果如下:



 

  • 大小: 42 KB
分享到:
评论

相关推荐

    highcharts加载多条曲线数据

    在"highcharts加载多条曲线数据"的场景下,我们通常指的是在一个图表中同时展示多组数据,每组数据表现为一条曲线,这样可以更直观地对比和分析不同数据系列的变化趋势。 首先,我们需要引入Highcharts库和jQuery库...

    Highcharts动态曲线图(使用jna监视cpu使用率)

    在这个实例中,我们将关注如何使用Highcharts创建动态曲线图,并结合Java Native Access (JNA)库来实时监控CPU的使用率。 动态曲线图是一种能够实时更新数据的图表,常用于展示随时间变化的趋势。在Highcharts中,...

    Highcharts动态实现曲线图和饼型图的展示

    在本文中,我们将深入探讨如何使用Highcharts动态实现曲线图和饼型图的展示。 首先,为了使用Highcharts,你需要在客户端的HTML页面中引入必要的JavaScript文件。如描述所示,这通常包括`highcharts.js`主文件,...

    highcharts.js实现曲线图、柱状图、面积图等

    Highcharts.js是一款强大的JavaScript图表库,它允许开发者轻松地在网页上创建各种动态、交互式的图表,包括曲线图、柱状图、面积图等多种图表类型。这个库以其易用性、灵活性和丰富的定制选项而受到广泛欢迎。在...

    动态加载曲线图

    3. JavaScript库:如D3.js、Chart.js、Highcharts、ECharts和本文提到的DemoTeechart等,它们提供了丰富的图表类型和强大的API,简化了动态加载曲线图的开发工作。例如,DemoTeechart是一个强大的图表库,支持多种...

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

    这个例子展示了如何在Java后端与Highcharts前端之间建立有效的通信,通过AJAX和JSON实现动态数据更新。这种架构在实时监控、数据分析、仪表盘等场景下非常常见,因为它可以实现实时刷新的图表,用户无需手动刷新页面...

    highcharts动态开发实例

    Highcharts是一款广泛应用于Web开发中的JavaScript图表库,它能够帮助开发者轻松创建出各种美观的数据可视化图形,如柱状图、曲线图和饼状图等。本实例是关于如何结合PHP和MySQL数据库,利用Highcharts进行动态数据...

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

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

    Vue 中使用vue2-highcharts实现曲线数据展示的方法

    "Vue 中使用vue2-highcharts实现曲线数据展示的方法" 在本文中,我们将介绍如何使用Vue框架和vue2-highcharts库来实现曲线数据展示的方法。通过本文,读者可以学习如何使用vue2-highcharts来创建一个简单的曲线图表...

    Java和Highcharts实现折线图

    在这个场景中,我们将探讨如何使用Java和Highcharts这两个工具来实现一个动态的、交互式的折线图。Highcharts是一个流行的JavaScript库,专门用于创建高质量的图表,而Java则作为后端语言,负责处理数据并将其传递给...

    用QWebEngineView呈现HighCharts图形,并实现曲线的拖拽

    本文将详细介绍如何利用QWebEngineView呈现HighCharts图形,并实现曲线的拖拽功能。 首先,我们需要了解HighCharts的基本使用。HighCharts通过在HTML页面中嵌入JavaScript代码来生成图表。我们可以通过设置各种配置...

    Highcharts多个图表共用一个提示框,每个图表多条曲线

    在这个特定的场景中,我们关注的是如何实现"Highcharts多个图表共用一个提示框,每个图表多条曲线"的功能。这通常涉及到对Highcharts API的深入理解和定制。 首先,我们要理解Highcharts的提示框(tooltip)是用于...

    android 曲线图highchartdemo

    高级特性:Highchart曲线图的实现** 创建Highcharts曲线图需要编写HTML和JavaScript代码。首先,在HTML中引入Highcharts的JavaScript库,然后在JavaScript中配置图表的选项,最后调用`Highcharts.chart()`方法绘制...

    强大的highcharts插件曲线图(类似股票曲线图)

    Highcharts是一款广泛应用于Web开发中的JavaScript图表库,它能够帮助开发者轻松创建各种类型的交互式图表,包括折线图、柱状图、饼图、散点图等,而且非常适合用来绘制类似股票曲线图的动态数据展示。这个插件以其...

    在.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图包含网页静态demo

    本项目利用Highcharts库、Ajax异步请求以及Json数据格式,实现了动态的曲线图、柱状图和饼图,为数据报表提供了一种直观且吸引人的呈现方式。 Highcharts是一个强大的JavaScript图表库,它支持多种图表类型,如折线...

    highcharts曲线图

    要实现"实时显示highcharts曲线图,读取本地txt文件",首先需要对Highcharts的基本概念和API有深入理解。Highcharts的核心是配置对象,通过设置这个对象的各种属性,我们可以定制图表的样式、数据、交互行为等。例如...

    highcharts曲线图,饼状图

    Highcharts是一款广泛应用于Web开发中的JavaScript图表库,它能够帮助开发者轻松创建各种动态、交互式的图表,包括曲线图和饼状图。这个库以其简洁的API、强大的自定义能力和跨浏览器兼容性而受到欢迎。在本文中,...

    JS highcharts实现动态曲线代码示例

     支持大部分的图表类型:直线图,曲线图、区域图、区域曲线图、柱状图、饼装图、散布图;  跨语言:不管是PHP、.net还是Java都可以使用,它只需要三个文件:一个是  Highcharts的核心文件highcharts.js,还有a ...

    highcharts的js文件

    总之,Highcharts的js文件是构建数据可视化的强大工具,无论是简单的柱状图还是复杂的动态曲线图,都能轻松实现。通过深入理解和灵活运用这些文件,开发者可以提升Web应用的数据展示能力,为用户提供直观易懂的图表...

    Highcharts饼状图 柱状图 曲线图

    Highcharts是一款强大的JavaScript图表库,用于在Web页面上...无论是饼状图、柱状图还是曲线图,都能通过灵活的配置和自定义实现各种需求。通过深入学习和实践,你将能够熟练掌握Highcharts,提升你的数据可视化能力。

Global site tag (gtag.js) - Google Analytics