最近做公司的APM项目涉及到数据可视化,简单调研了一下目前业内推崇的工具,自然最终选择是非D3莫属,特别是看了官网上那些绝妙的示例之后,感觉这玩意儿炫到爆!选择D3最重要的一点是D3提供基础的必要的功能,在这些功能之上我们可以高度自定义自己的图表。看了俩天《Data Visualization with D3.js Cookbook》算是入门了吧,看一点就记录一下,以后也好回顾!

`
D3的简介在网上有很多,《Data Visualization with D3.js Cookbook》中用了很短的一段作介绍:'D3.js is a JavaScript library designed to display digital data in a dynamic graphical form. It helps you to bring data to life using HTML, SVG, and CSS. D3 allows great control over the final visual result, and it is the hottest and most powerful web-based data visualization technology on the market today.'[1]

关键词: dynamic graphical form driven by data , 然后就是hottest and most powerful(我相信群众的眼睛是雪亮的) ,看到这俩点也就敲定就选他了!

D3基本的几个功能包括:元素选择,数据绑定,值域映射,坐标定义,动画。除此之外还提供多种常用的图形布局,如饼图,树状图,力学图等。

D3的选择器(支持CSS选择器语法)跟jquery的选择器存在很大差别,D3的选择器可以选择不存在的元数,然后更据后面绑定的数据的数量动态的创建对应数量的元素。在根据数据动态生成元素这里要提到三个个操作 enter(), update(), exit() enter()一般用在data()之后可以理解成匹配数据和显示元素(显示元素这里我指的不是一个动作,而是指代表数据显示在界面上的html元素)的个数,update即更新绑定到html元素上的数据,exit呢就是得到多于的html元素,enter之后呢一般要append(如果缺少html元素会添加,如果已足够那么append不会执行,d3会自己去判断) ,exit之后呢要remove,意思是删掉多于的元素。
绑定数据后相应的DOM节点上会多出一个属性:__data__这是属性的值就是绑定到相应节点的数据。


值域映射很好理解,目的是为了便于图形表示将原始的值映射到另一个值域,也就是数学上的函数映射: y=f(x) 。 d3提供一些基本的映射规则,当然也允许你自己定义自己的映射函数,方法见之前提到的那本书的chapter 4中的Implementing a custom interpolator一节(这本书确实讲的很好).

坐标定义很简单的,就像用笔在纸上画图一样,只不过这里用的是代码。规定好相应的值域映射然后绑定到相应元素就好。 值得一提的是动态坐标,即根据数据或显示需要动态跟新坐标的比例,令人惊讶的是这个操作仅仅重新定义坐标轴的值域即可,而且还能添加过渡的动画,太赞了!!!

动画部分非常简单transition(),ease(),delay() 就完了。

再提一下D3的线条,也就是代码里面常见的links ,比如var link=d3.layout.force.links();这个link里的元素就是保存的线条,如果你仔细看里面的数据结构的话,可以发现里面有source和target俩个属性,顾名思义也就是起始点和目标点.在画树状图的时,由于树状图不可能有回路,若数据中明显有回路,d3会忽略这些回路,若想保留这些回路,方法就是自己保留回路中的一条边,然后手动将这条边添加到links数组里面去,而这条边就是有source和target(d3处理过后的source和target,里面包含位置信息)

简要的概括就这么多,有时间再奉上几篇别人的作品研究和自己的网络拓扑图的代码 :)
`

D3序的更多相关文章

  1. 【D3】cluster layout

    一. 和其他D3类一样,layout 可以链式传递,使用简明的申明添加多种自定义设置. 二.API # d3.layout.cluster() Creates a new cluster layout ...

  2. D3比例尺

    D3中有个重要的概念就是比例尺.比例尺就是把一组输入域映射到输出域的函数.映射就是两个数据集之间元素相互对应的关系.比如输入是1,输出是100,输入是5,输出是10000,那么这其中的映射关系就是你所 ...

  3. D3、EChart、HighChart绘图demol

    1.echarts:   <!DOCTYPE html>   <html>   <head>   <meta charset="utf-8" ...

  4. D3.js 入门学习(二) V4的改动

    //d3.scan /* 新的d3.scan方法对数组进行线性扫描,并根据指定的比较函数返回至少一个元素的索引. 这个方法有点类似于d3.min和d3.max. 而d3.scan可以得到极值的索引而不 ...

  5. 软件项目技术点(1)——d3.interpolateZoom-在两个点之间平滑地缩放平移

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 软件参考d3的知识点 我们在软件中主要用到d3.js的核心函数d3.interpolateZoom - 在两个点之间平滑地缩放平移.请 ...

  6. D3.js学习笔记(四)—— 使用SVG坐标空间

    目标 在这一章,你将要使用D3.js基于一些数据把SVG元素添加到你想要的坐标位置上. 我们的目标就是使用下面的数据集: var spaceCircles = [30,70,110]; 并使用D3.j ...

  7. d3 bubble源码分析

    技术 d3.d3.pack.d3.hierarchy 展示 https://bl.ocks.org/xunhanliu/e0688dc2ae9167c4c7fc264c0aedcdd1 关于怎么使用, ...

  8. 【D3 API 中文手冊】

    [D3 API 中文手冊] 声明:本文仅供学习所用,未经作者同意严禁转载和演绎 <D3 API 中文手冊>是D3官方API文档的中文翻译. 始于2014-3-23日,基于VisualCre ...

  9. d3.js 入门指南

    说到数据可视化,我们会行到很多优秀的框架,像echarts.highcharts,这些框架很优雅,健壮,能满足我们对可视化的大部分需求,但是缺点也很明显,就是这些框架几乎是不可定制化的,当遇到特殊的需 ...

随机推荐

  1. linux ssh 配置 添加用户 另外一种方法

    [root@localhost ~]# vi /etc/pam.d/sshd #%PAM-1.0auth       required     pam_stack.so service=system- ...

  2. Xcode repository host is unreachable

    遇到这个错误,首先不要急.按照如下方法即可(如果你的svn地址没有问题的话): url要使用域名,所以映射下 1. 修改host:在应用程序里面打开终端(terminal),输入 sudo vi /e ...

  3. 【30】透彻了解inlining 的里里外外

    1.inline方法相当于文本替换,不需要承担方法调用的额外开销,同时还有潜在的优势,文本替换后,编译器会进行代码优化.而对于方法调用,编译器没有能力进行代码优化. 2.显而易见,inline方法往往 ...

  4. 【剑指Offer学习】【全部面试题汇总】

    剑指Offer学习 剑指Offer这本书已经学习完了.从中也学习到了不少的东西,如今做一个总的文件夹.供自已和大家一起參考.学如逆水行舟.不进则退.仅仅有不断地学习才干跟上时候.跟得上技术的潮流! 全 ...

  5. 十、Socket之UDP编程

    UDP基础知识 UDP(User Datagram Protocol,用户数据报协议)是一个简单的.面向数据报的无连接协议,提供了快速但不一定可靠的传输服务. UDP与TCP相比主要有以下区别. 1. ...

  6. C#_delegate EndInvoke

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. 第一个js程序

    <html><head> <title>Untitled</title> <script >function demo(){ alert ( ...

  8. TCP/IP协议原理与应用笔记03:IP地址分类

    1. 事实上,每个IP地址都包含两部分,即网络号和主机号. 例如:202.112.81.34指的 就是202.112.81这个网络的第34号机. 网络号:用于识别主机所在的网络: 主机号:用于识别该网 ...

  9. MySQL(4):数据表创建

    数据库是表的容器,表,必须属于某个数据库. 可以通过.语法,指明数据表所属的数据库 比如:database.table 进行表操作的时候,都会指定当前的默认数据库. use db_name; 1.创建 ...

  10. docker container link

    http://blog.csdn.net/kongxx/article/details/38676917