探索使用Dojo相关组件绘制实时动态图表

Dojo charting 是 Dojox 目录下的一个矢量图组件库,它提供了众多图表类型,如点线图、柱状图、饼图、聚簇柱图、网状图等 2D 图形以及 3D 图和地图,同时包含支持图表动态效果和主题的各种组件,如 Legend、">Highlight 以及 Tooltip,为可视化的 Web 应用开发者提供的诸多方便。

下面将介绍如何用 Dojox.charting 创建图表,并实现并实现图表的实时更新。

创建静态图表

创建一个静态图表的过程如下:

清单 1.创建简单图表

<div id="chartOne" style="width: 400px; height: 240px; margin: 10px auto 0px auto;"></div><script>require(["dojox/charting/Chart", "dojox/charting/axis2d/Default", "dojox/charting/plot2d/StackedAreas", "dojox/charting/themes/Wetland" , "dojo/ready"], function(Chart, Default, StackedAreas, Wetland){ var chart = new Chart("chartOne"); chart.addPlot("default", {type: StackedAreas, tension:3}) .addAxis("x", {fixLower: "major", fixUpper: "major"}) .addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", min: 0}) .setTheme(Wetland) .addSeries("Series A", [1, 2, 0.5, 1.5, 1, 2.8, 0.4]) .addSeries("Series B", [2.6, 1.8, 2, 1, 1.4, 0.7, 2]) .render();});</script>

创建动态图表

图 1.Chart 示例

下面介绍如何创建示例图 1 中,用于实时更
新的图表。

Chart 参数

Dojox.charting 参数介绍: margins:图表显示的
大小,由参数中’domNode’的样式决定,设置 width 和 height 可以改变图表的大小。margins 参数用来控制图表在 Dom 节点中的位置。如果出现 Y 轴坐标值长度较长时,造成图表不居中时,可以修改 margins.l 和 margins.r 使图表达到
合适的效果。 stroke : 图表边框的样式,dojox.gfx.Stroke 对象。
例如 stroke: {width:2,color:'red'}; fill : 图表背景色,dojox.gfx.Fill。例如 fill : 'lightblue', delayInMs:Number, 延迟渲染时间,以 ms 为单位。

在清单 1 中,添加创建图表的第一步 new chart()中的参数,修改图表样式,对于图 1 中的示例,我们使用如下参数:

清单 2 .Chart 参数

Var myChart = new Chart(domNode, {margins: {l: 40,r: -60,t: 0,b: 0},});

数据转换

实时上,我们使用 REST 服务返回的数据进行绘图时,服务器返回的数据
往往是 JSON 格式的坐标值,例如:

清单 3 .REST API 返回的绘图数据

var rawData = {"statistics": [{ "id": 1, "healthState": "OK", "captureTime": "2013-08-13 10:00:40", "value": 0 },{ "id": 2, "healthState": "OK", "captureTime": "2013-08-13 10:01:10", "value": 3 },{ "id": 3, "healthState": "ERROR", "message": "Pass the error threshold!", "captureTime": "2013-08-13 10:01:40", "value": 6 }]}

因此,我们需要将 JSON 格式的数据转化成 Dojo Chart 能识别的数据类型。Dojo Chart 支持 addSeries 时使用 JSON 对象的数组。图 1 中,我们以’captureTime’为横轴,分别为’value’和’id’绘制 2D 曲线,则需要将’value’和’id’分别转换成转换为’y’值。

清单 4 .Y 值转换函数

_valTrans = function (arrData,yName){var series = [];for(var obj in arrData){var tmpItem = {}; if(arrData[obj][yName]!==undefined){ tmpItem.y = parseFloat(arrData[obj][yName]);}else{ console.warn('series:',yName,'not exist.'); } series.push(tmpItem);};return series;},

清单 5.添加数据

myChart.addSeries(‘value’,_valueTrans(rawData,’value’));myChart.addSeries(‘id’,_valueTrans(rawData,’id’));

添加曲线

添加曲线可以直接使用 addPlot(‘plotName’,{args})函数。

plot 具体参数:

type : 曲线类型,如 Areas, Bars, Bubble , Columns , Pie , Markers ,Lines 等,每种类型曲线支持的数据结构和其它参数不同。 其它基本参数: hAxis : String,横坐标名称; vAxis : String,纵坐标名称; lines :Boolean 值,在点之间是否画线; areas :Boolean 值,是否画面; markers :Boolean 值,是否显示点 tension : Number|String,将曲线平滑化,支持数字,或者’x’, ’X’, ‘S’; stroke :dojox.gfx.Stroke 对象,设置该图中所有曲线的样式; fill :dojox.gfx.Fill 对象,设置该图中所有点的样色; markerStroke :dojox.gfx.Stroke 对象,设置该图中所有点的样式; styleFunc :根据每个点,返回样式对象。

图 1 示例中,我们使用如下参数:

清单 6.Plot 参数

myChart.addPlot("default",{ type : 'Markers': markerStroke:{width:1}};

添加坐标轴

使用 addAxis()函数添加坐标轴。

addAxis 函数参数介绍:

name : 坐标名; kwArgs :其它参数对象 vertical :Boolean, 确定是横坐标还是纵坐标; fixUpper :String ,最大值显示方式,"major", "minor", "micro", 或 "none"; fixLower :String,最小值显示方式,"major", "minor", "micro", 或 "none"; includeZero :Boolean,是否显示 0; min: Number,坐标最小值; max: Number,坐标最大值; labels: {value:’’,text:’’}对象数组,根据 value 排序; labelFunc : 返回坐标值的文本 text; dropLabels :Boolean, 是否显示所有坐标值,默认 true。 title : 坐标标题; titleGap、titleFont、titleFontColor、titleOrientation: 标题样式; rotation :坐标文本旋转角度。 labelSizeChange : 放大缩小时,坐标是否同步放大缩小。

为图 1 示例添加坐标:

清单 7.添加坐标

myChart.addAxis("x", {labelFunc : function(value){var label = _getLabels(rawData,value);return label;},max : totalPoint ,labelSizeChange : true,//dropLabels : false,rotation : 15});myChart.addAxis("y, {vertical : true,fixUpper : "major",fixLower : "major",});_getLabels : function(arrData,value){// value not all intif(arrData.length < 1 ||arrData.length <= value||parseInt(value)!=value){return '-';}else{//console.log('label:',arrData[value]);return arrData[value].captureTime.toString();}};

清单 4 中已经将所需绘图的数据相应 y 值转换,所以,这里 y 坐标会直接显示 Number 类型数据,不需单独设置 lable。未设置’max’和’min’时,坐标轴会根据当前数据的最大最小值,自动 s 适配坐标范围。

在以时间为横轴的动态图中,需要将时间转换成 Dojox.Charting 能识别的数据,清单 7 中,通过_getLables()函数,得到 x 轴的坐标文本。其中,参数’value’指横坐标刻度的索引值,不全为整数,默认情况,x 轴会显示该索引值,所以需要将 rawData 中的 captureTime 字段数据替代 x 轴的索引值。初始化时,rawData 数据长度可能会比图的总点数少,而 labelFunc 的函数需要每个 x 轴上的 value 都有 label 的返回值,因此在_getLabels()函数中,当该点不存在时,仍然需要返回 ‘-‘ 或者’ ’(空格字符串)。

时间: 2024-07-29 10:55:03

探索使用Dojo相关组件绘制实时动态图表的相关文章

Android开发中使用achartengine绘制各种图表的方法

本文实例讲述了Android开发中使用achartengine绘制各种图表的方法.分享给大家供大家参考,具体如下: 1. ABarChart.java package com.anjoyo.achartengine; import java.util.Random; import org.achartengine.ChartFactory; import org.achartengine.chart.BarChart.Type; import org.achartengine.model.Cat

利用OWC服务器端组件动态生成图表

动态|服务器|图表 利用OWC服务器端组件动态生成图表 以前在这里也曾经有一些文章谈到了在ASP中生成动态图表的问题,但那些文章中所谈到的一些方法都有某些方面的限制,如需要在客户端安装office2000或安装OWC,有些则可能在Intranet中使用时没什么问题,但在通过Internet访问的时候,就可能出现无法正常工作的现象(这主要和SQL Server的安全设置有关).那么,我们如何来避免这些问题呢?有一个很好的方法,就是将在ASP中生成的图表转换成图片文件保存在服务器上,这样用户最终看到

Win7系统如何重新注册IE10相关组件

有些用户比较习惯使用windows系统内置的IE浏览器,为了更好的体验IE浏览器与提高流畅性,有些win7操作系统用户会将IE升级至IE10版本.随着平常对IE浏览器的不同程序使用,难免会出现一些IE错误提示问题,可能是出现打开快捷方式没反应,出现这种情况就需要对IE10相关dll文件组件进行重新注册,就可以解决IE浏览器没反应或错误问题,下面来看看win7 64位旗舰版重新注册IE10相关组件操作教程吧. 操作方法/步骤: 1.点击开始.运行,在输入框里面输入cmd,点击Enter键,就可以打

《Cacti实战》——2.2 安装与配置相关组件和服务

2.2 安装与配置相关组件和服务 "原材料"准备好了,但距离Cacti成功运行还有一步之遥,必须正确.完整地安装配置Cacti所需的环境和服务,本节分为Windows和Linux两个平台来介绍安装和配置Cacti系统需要的基础环境和服务.2.2.1 Windows Server平台的环境搭建 以Windows Server 2008 R2 Standard版本为例,基于IIS的Windows平台的Cacti环境配置流程如图2-1所示. 当然,在Windows平台上,可以使用Apache

【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

RAC 工作原理和相关组件(三) RAC 工作原理和相关组件       OracleRAC 是多个单实例在配置意义上的扩展,实现由两个或者多个节点(实例)使用一个共同的共享数据库(例如,一个数据库同时安装多个实例并打开).在这种情况下,每一个单独的实例有它自己的 cpu 和物理内存,也有自己的 SGA 和后台进程.和传统的 oracle 实例相比,在系统全局区(SYSTEM CLOBAL AREA,SGA)与后台进程有着显著的不同.最大的不同之处在于多了一个GRD,GRD内存块主要是记录此ra

Spark学习之基础相关组件(1)

Spark学习之基础相关组件(1) 1. Spark是一个用来实现快速而通用的集群计算的平台. 2. Spark的一个主要特点是能够在内存中进行计算,因而更快. 3. RDD(resilient distributed dataset弹性分布式数据集)表示分布在多个计算节点上可以并行操作的元素的集合,是Spark的主要编程抽象. 4. Spark是一个大一统的软件栈: 4.1 Spark core实现了Spark的基本功能,包括任务调度.内存管理.错误恢复.与存储系统交互等模块.Spark Co

如何将JS绘制的图表保存成图片

问题描述 给出http保存图片,但是JS绘制的图表无法保存,显示为空白这个如何解决 解决方案 解决方案二:js绘制的图表?

ASP 中利用OWC 服务器端组件动态生成图表

动态|服务器|图表 引:Web程序开发中,经常需要从数据库表文件中提取数据,并对大批量的数据进行分析比较,此时最常用也是最直观明了的表现方法莫过于绘制图表. ASP擅长服务器端的Web编程,操作后台数据库更是它的强项.但是用ASP制作实时数据库图表有点困难,因为ASP本身并不支持图表功能,只能借助第三方控件进行开发,如VB的MSChart 控件.而微软推出的实时数据库图表制作组件-- O W C(Microsoft Office Web Components),为在Web中绘制图形提供了灵活的同

用Chart控件绘制动态图表

进行程序设计时,选用一个合适的ActiveX控件,有时可大大减少编程工作量.ActiveX 控件(又称OCX)基于COM技术,作为独立的软件模块,它可以在任何程序设计语言中插入使用.本文仅以VC++为例说明Chart控件的使用. Chart控件指Mschart.ocx(5.0版)或Mschrt20.ocx(6.0 版),是Visual Studio自带的ActiveX控件之一,其属性.事件很多,功能非常强大,可实现柱状直方图.曲线走势图.饼状比例图等,甚至可以是混合图表,可以是二维或三维图表,可