近期略有点诸事不顺,趁略有闲余之时,玩起D3.js。之前实际项目中主要是用各种chart如hightchart、echarts等,这些图形库玩起来貌都是完美的,一切皆可配置,但几年前接触了D3之后,觉得前面那chart类库局限的地方在于,基本不可定制;而D3呢,你说了算,你想画出什么样的图,你说了算,自由度很大,当时就有点膜拜和仰慕,小打小闹的玩了几下,没有沉下心来专心去玩,当时觉得真的很难。不理解,也看不进去。

后面因为接触了react、redux,接触了函数式编程。再回过头来从新捣鼓起D3来,感觉没那么困难了,D3其实也有点函数式编程的思路。别被标题吓跑哈,脚踏实地加点毅力D3应该也是可以上手的。

费话不多说,先上一张让你逆天的数据可视化的效果图,点我查看在线效果

D3.js基础

了解SVG图作图

为什么要学习SVG图呢?因为D3.js堪称SVG中的jQuery,当然你如果想用D3输出Canvas图也可以,但SVG图操作起来更加灵活,更加方便调试,在Chrome中调试可以让你飞起来。

学习D3.js的语法

语法是必需的,建议自行去官网上学习其语法,或者借/买一本书来同步学习,先尝试实现简单的图形,如果可以的话最好了解一下函数式编程的curry与compose思想,不建议一开始就去接触高大上的众多在线Demo,这样会容易让你误入深渊不能自拔,真的就从入门到放弃。

学习D3.js的编程思路

1)语法其实可以体现其编程思路,起步当然是学习其强大的选择器,下面感觉一下

d3.select("body").style("background-color", "black"); // 直接选择 ->并设置属性

d3.selectAll("p").style("color", function() { // 选择 -> 动态设置属性

return "hsl(" + Math.random() * 360 + ",100%,50%)";

});

d3.selectAll("p") // 选择 -> 绑定数据 -> 动态设置属性

.data([4, 8, 15, 16, 23, 42])

.style("font-size", function(d) { return d + "px"; });

2)接着是理解 Update,Enter 和 Exit 的思路

// Update…

var p = d3.select("body") // 直接把数据绑定到Dom并输出,数组元素个数与p节点的个数一致就全部更新文本,如果不一致,就只更新现有p节点的文本,多余的数据会被保存起来,看下面会用到

.selectAll("p")

.data([4, 8, 15, 16, 23, 42])

.text(function(d) { return d; });

// Enter…[常用]

p.enter().append("p") // 如果不一致,数组元素个数比p节点多,就插入p节点补足并相应更新文本

.text(function(d) { return d; });

// Exit…[常用]

p.exit().remove(); // 如果不一致,数组元素个数比p节点少,就删除多余的p节点

3) 然后要学习D3的画图一般思路,比如要画一个线状图,那么我们:

把输入的原始数据转化成为标准的D3可接受的数据格式 -> 根据原始数据定义好x轴函数、y轴函数和定义好作图方式(如d3.line) -> 在SVG上面画出x轴y轴、根据原始数据结合x轴及y轴函数作线状图 -> 再画出标题等细节的东西

4) 最后,给已经完成的图形添加动画效果

没有动画效果的图形看上去会比较乏味。动画基本写法如下:

// 把所有圆圈改变半径

d3.selectAll("circle").transition() // 定义动画

.duration(750) // 动画持续时间

.delay(function(d, i) { return i * 10; }) // 元素动画要延时多少时间开始

.attr("r", function(d) { return Math.sqrt(d * scale); }); // 设置最后效果

D3.js实战项目

注意:下面代码因为结合了React,javascript使用的是ES6,D3版本是最新的V4版,不熟悉的话自行恶补基础。

一、D3实现简单柱状图[在线demo][源代码]

二、D3实现简单简单面积图[在线demo][源代码]

三、D3实现简单简单饼图、圆环图[在线demo][源代码]

四、D3实现径向堆栈柱状图[在线demo][源代码]

五、D3实现简单弦图[在线demo][源代码]

六、D3实现简单打包图[在线demo][源代码]

七、D3实现雷达图[在线demo][源代码]

八、D3实现力导向图[在线demo][源代码]

九、D3实现中国地图[在线demo][源代码]

d3js mysql_D3.js入门指南相关推荐

  1. d3.js 入门指南 - 仪表盘

    D3的全称是Data-Driven Documents(数据驱动的文档),是一个用来做数据可视化的JavaScript函数库,而JavaScript文件的后缀通常为.js,所以D3被称为D3.js. ...

  2. d3.js 入门指南

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

  3. Three.js入门指南

    1.threejs导入3d模型到web端,3d模型的文件格式可以找个建模软件转化为threejs所支持的格式,如.dae .obj .mtl stl gld等 harp.gl 3D地图渲染引擎 key ...

  4. html5怎么兼容js 插件,Modernizr.js入门指南(HTML5CSS3浏览器兼容插件)

    HTML5 和 CSS3 的快速发展,给我们带来了极大的便利,比如从此再也不用花费大量的时间只是为了设计一个圆角的效果. 但是!我们不能像控制机器一样来控制所有的人都一夜之间升级到现代浏览器,因为那些 ...

  5. 物理世界的互动之旅:Matter.js入门指南

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 本文简介 戴尬猴,我是德育处主任 欢迎来到<物理世界的互动之旅:Matter.js入门指南>. 本文将带您探索 Matter. ...

  6. Vue.js 入门指南之“前传”(含sublime text 3 配置)

    题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的"入门",就算是"入门指南&quo ...

  7. html js不触发_「万字整理 」这里有一份Node.js入门指南和实践,请注意查收 ??

    前言 什么是 Node.js 呢 ? JS 是脚本语言,脚本语言都需要一个解析器才能运行.对于写在 HTML 页面里的 JS,浏览器充当了解析器的角色.而对于需要独立运行的 JS,NodeJS 就是一 ...

  8. handlebars.js_Handlebars.js入门指南

    在本文中,我们将研究Handlebars ,这是一个基于MustacheJavaScript模板引擎. 它与Moustache具有相同的功能,但具有许多新功能. Handlebars是一个实用的模板工 ...

  9. Ember.js 入门指南——查询记录

    2019独角兽企业重金招聘Python工程师标准>>> store提供了统一的获取数据的接口.包括创建新记录.修改记录.删除记录等,更多有关Store API请看这个网址的介绍:ht ...

最新文章

  1. spark 写mysql 设置主键_Spark Sql 连接mysql
  2. Boost1.62.0 + VS2015 配置
  3. [Leetcode] 445. Add Two Numbers II
  4. Python3——简单的TCP实例
  5. How to check firmware and drivers of a VMware ESXi host
  6. Bootstrap HTML编码规范之减少标签的数量
  7. C++学习笔记-异常处理
  8. Fusion-IO:应用应为闪存优化
  9. C++ boost 正则表达式用法
  10. Audition人声美化
  11. oracle打cve补丁,Oracle多个产品高危漏洞补丁安全预警
  12. Sigfox的物联网生意经:弱水三千只取一瓢饮
  13. l10n php download,在PHP,WordPress,phpMyAdmin,C,i18n,L10n等双下划线?
  14. FreeRTOS 事件标志组
  15. 河南大学计算机学院夏令营,河南大学数学与统计学院2020年优秀大学生国际夏令营...
  16. Struts1.x 登录实验-无数据库版
  17. Educoder -- Web程序设计基础2021秋--简历表页面的制作
  18. 拍拍关闭:C2C模式走向终结?
  19. 宇宙无敌之Map集合讲解
  20. 计算机辅助诊断(Computer-aided diagnosis)小总结

热门文章

  1. scala集合转java_Java,Scala,Guava和Trove集合-它们可以容纳多少数据?
  2. gradle 命令行_Gradle命令行便利
  3. Spring Cloud Gateway –配置简单路由
  4. Redis Client Lettuce 5 GA发布
  5. 使用Dagger 2在GWT中进行依赖注入
  6. 使用Spring boot,Thymeleaf,AngularJS从零开始构建一个新的Web应用程序-第1部分
  7. Spring RESTful Web服务中的异常处理
  8. Jersey WebResource –标头不附加
  9. 在Graphite中存储Hystrix的几个月历史指标
  10. 这是东西:jUnit:动态测试生成