随着云计算时代的到来,由于Web技术的快速革新以及为了提供高质量的用户体验,数据可视化成为了前端技术发展的一大方向。为了解决这个问题,现如今涌现了很多优秀的第三方的javascript图形库,比如highcharts.js,echarts.js,d3.js,go.js…

数据可视化javascript插件对比

在HTML5标准支持下,web实现图形标准主要分为canvas和svg,上述的javascript图形库都是依赖2者之一作为底层库。Canvas基于像素,提供2D绘制函数,是一种HTML标签,依赖于HTML,只能通过javascript 绘制图形;SVG为矢量,提供一系列图形元素、动画、事件机制,既可以独立使用,也可以嵌入HTML中使用。 图形库的封装程度也有区分,像highchart.js,echart.js属于过度封装,只暴露了数据模型接口,作为开发者很难修改内部API实现,不利于企业实现定制化需求,而像d3.js,go.js更多的是对图表的节点、连线及工具的封装,并预留了接口便于开发者进行定制化开发。另外,图形库的商业版权也各尽不同,像highchart.js,go.js都是要收费的,而echart.js,d3.js则是免费开源的。

gojs简介及特点

gojs是一款基于canvas的图形库,是由Northwoods公司开发的商用javascript插件,可以基于项目的不同需求实现具有交互性的各类图表,比如流程图,树图,关系图,力导图等等。gojs采用面向对象思想,以图形对象表示绘图单元,JSON对象作为数据模型,图形对象通过属性绑定的方式从数据模型获取相关的属性值。
 
图形对象与数据模型关系图

gojs数据模型

gojs的数据模型以是否为树图分为GraphLinksModel和TreeModel两种JSON对象,GraphLinksModel包含nodeDataArray和linkDataArray属性,而TreeModel只包含nodeDataArray属性。

gojs绘图单元

gojs的绘图单元很好理解,比如图中一个节点,一条线都可以理解成一个绘图单元,gojs通过不同的绘图模板实现不同的绘图单元,比如node,group,line…另外,gojs通过模板地图的方式管理不同样式的相同类型的绘图单元。

gojs图表实践

gojs绘图流程包括创建图形对象,构建数据模型,设置图形对象属性,绑定数据模型,添加交互行为。 
 
gojs创建流程图1、创建图形对象可以把$理解成一个画笔,而myDiagram理解成画布。

var $ = go.GraphObject.make;

画图时,通过$调用gojs自身的属性和方法 , 完成节点和连线的绘制,attrs为图形对象属性。

var myDiagram = $( go.Diagram, "dom_id" , {attrs});
myDiagram.nodeTemplate = $( go.Node, "Auto", {attrs});
myDiagram.linkTemplate = $( go.link, {attrs});

2、构建数据模型 
数据模型分为2种,下面以图形连线模型为例,它包括nodeDataArray和linkDataArray:

var dataModel = $(go.GraphLinksModel);
dataModel.nodeDataArray = [{},{}];
dataModel.linkDataArray = [{},{}];
myDiagram.model = dataModel;

3、图形对象属性绑定 
举例说明,比如将图形对象的边框宽度strokeWidth和数据模型的宽度Width进行绑定:

new go.binding("strokeWidth","width");

4、添加交互行为 
举例说明,比如为node添加鼠标事件,通过给其属性添加相应方法进行事件绑定:

{mouseEnter:onNodeMouseEnter}
...
function onNodeMouseEnter(){
//do something
}

5、本地调试 
建议安装Node.js,完成后安装http-server:

npm install http-server

然后在项目主目录启动本地Web服务: 

gojs学习与思考

目前,官方网站是学习gojs的最佳选择。学习路径:learn->introduction->samples->api

元数据地图实践 
gojs不足之处在于对于css动画支持不够,商用版权导致开发成本增加。优势在于canvas库封装较好,提供丰富的交互事件,能够满足实际项目的个性化需求。在项目使用中,对于常见图表,项目实际使用echartjs作为替代选择,对于定制化需求则采用gojs实现。

数据可视化-gojs插件使用技巧总结的更多相关文章

  1. 数据可视化 gojs 简单使用介绍

    目录 1. gojs 简介 2. gojs 应用场景 3. 为什么选用 gojs: 4. gojs 上手指南 5. 小技巧(非常实用哦) 6. 实践:实现节点分组关系可视化交互图 最后 本文是关于如何 ...

  2. Nagios 快速实现数据可视化的几种方式

    Nagios 是一款强大的开源监控软件,但他本身不能绘图,只能查看当前数据,不能看历史数据以及趋势,也正因此,想要更舒适的使用就要搭配绘图软件,现在可搭配的绘图软件有很多,例如 pnp4nagios, ...

  3. 分形、分形几何、数据可视化、Python绘图

    本系列采用turtle.matplotlib.numpy这三个Python工具,以分形与计算机图像处理的经典算法为实例,通过程序和图像,来帮助读者一步步掌握Python绘图和数据可视化的方法和技巧,并 ...

  4. Python3:pyecharts数据可视化插件

    Python3:pyecharts数据可视化插件 一.简介 pyecharts 是一个用于生成 Echarts 图表的类库. Echarts 是百度开源的一个数据可视化 JS 库.主要用于数据可视化. ...

  5. 1.前端数据可视化插件:Highcharts、Echarts和D3(区别)

    前端数据可视化插件有很多,但我用过的只有Highcharts(https://www.hcharts.cn/).Echarts(http://echarts.baidu.com/)和D3(https: ...

  6. 基于World Wind的数据可视化插件

    基于开源数据可视化类库(MSChart.VTK.D3)实现的组件样例,并基于World Wind实现调用上述组件的功能插件. GitHub下载地址:https://github.com/hujiuli ...

  7. 数据可视化之powerBI技巧(六)在PowerBI中简单的操作,实现复杂的预测分析

    时间序列预测就是利用过去一段时间内的数据来预测未来一段时间内该数据的走势,比如根据过去5年的销售数据进行来年的收入增长预测,根据上个季度的股票走势推测未来一周的股价变化等等. 对于大部分人来说,这是个 ...

  8. 2018年最佳JavaScript数据可视化和图表库

    现在有很多图表库,但哪一个最好用?这可能取决于许多因素,如业务需求,数据类型,图表本身的目的等等.在本文中,每个JavaScript图表库将与一些关键因素进行比较,包括图表类型,商业或免费和开源状态. ...

  9. 百度数据可视化图表套件echart实战

    最近我一直在做数据可视化的前端工作,我用的最多的绘图工具是d3.d3有点像photoshop,功能很强大,例子也很多,但是学习成本也不低,做项目是需要较大人力投入的.3月底由在亚马逊工作的同学介绍下使 ...

随机推荐

  1. Python - 代码片段,Snippets,Gist

    说明 代码片段来自网上搬运的或者自己写的 华氏温度转摄氏温度 f = float(input('请输入华氏温度: ')) c = (f - 32) / 1.8 print('%.1f华氏度 = %.1 ...

  2. UIScrollView学习指南

    --前言 笔者结合自己的工作经验,梳理关于UIScrollView究竟需要掌握哪些知识才算是一个好手.至于具体的实施方案,网上资源很多,自行了解吧. --正文 1.涉及到滚动和放大的功能,优先考虑使用 ...

  3. unity优化-内存(网上整理)

    内存优化内存的开销无外乎以下三大部分:1.资源内存占用:2.引擎模块自身内存占用:3.托管堆内存占用.在一个较为复杂的大中型项目中,资源的内存占用往往占据了总体内存的70%以上.因此,资源使用是否恰当 ...

  4. 学习笔记(12)- chatopera的语义理解系统

    参考https://github.com/chatopera/clause-py-demo 前提:安装完毕 Docker.Docker Compose 和 Python3.x git clone ht ...

  5. Android 学习笔记四:创建工具栏按钮

    原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏 ...

  6. linux 基本命令学习总结

    1. linux的目录结构  (linux核心:一切皆文件) 目录结构解释 (主要的有 /etc  /home  /mnt  /opt  /usr   /tmp) 相对路径和绝对路径的区别 绝对路径  ...

  7. 2020年java架构师是什么-java架构师基本要求

    Java系统架构师是一个既必须掌控整体又必须洞察部分瓶颈并根据实际的业务流程情景得出解决方法的团队领导型角色.一个架构师得必须充足的创造力,可以各种各样目标要求开展不一样层面的拓展,为目标顾客出示更加 ...

  8. 7.Varnish

    概述 Varnish处理HTTP请求的过程大致分为如下几个步骤:         1> Receive状态:请求处理入口状态,根据VCL规则判断该请求应该Pass或Pipe,还是进入Lookup ...

  9. 解决Python2中文ascii编码的方法

    在YiiChina签到的时候,经常会看到有人在说说里面发群主是最帅的,yii 是 PHP 最好的框架,没有之一,就想到使用一言,在每天签到的时候也发一句话 同时使用方糖将内容推送到微信,防止有什么不对 ...

  10. No module named 'PyQt5.QtWebEngineWidgets' 解决方法

    “No module named 'PyQt5.QtWebEngineWidgets”报错的原因是PyQt5版本过高,解决方法主要有两大类方法: [方法一] 指定安装5.10.1版本的pyqt5 pi ...