D3.js从入门指南

前言

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

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

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

D3.js基础

  1. 了解SVG图作图

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

  2. 学习D3.js的语法

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

  3. 学习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][源代码]

交流与学习

  1. 本文作者:Nelson Kuang,别名:Fast Mover  欢迎大家留言及多多指教
  2. Github地址:https://github.com/nelsonkuang/ant-admin
  3. 版权声明:欢迎转载学习 => 请标注信息来源于http://www.cnblogs.com/fastmover/p/7779660.html

D3.js从入门指南相关推荐

  1. 可视化工具D3.js教程 入门 (第十四章)—— 中国地图

    可视化工具D3.js教程 入门 (第十四章)-- 中国地图 代码 <!DOCTYPE html> <html lang="en"><head>& ...

  2. node.js快速入门指南

    Node.js迅速蹿红,衍生了一个强大的开源社区.支持企业,甚至还拥有属于自己的技术大会.我把这种成功归结于它的简介,高校,同时提高了编程生产力. Node.js 的前置知识很多,例如以下知识 Jav ...

  3. 【D3.js开发入门:绘制图表】静态图表

    什么是 D3.js? D3.js是用于 HTML 和 SVG 实现的 JavaScript 可视化库.基于数据操作文档的 JavaScript 库. 说到D3不得不提到Echarts,Echarts和 ...

  4. Vue.js新手入门指南

    最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...

  5. 分享:Vue.js新手入门指南-0518-v1.0张雅慧

    最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...

  6. 分享:Vue.js新手入门指南-0518-v1.0张雅慧(续)

    11.我在学习Vue.js的时候老是听到Webpack,这是啥? Webpack是一个前端打包和构建工具.如果你之前一直是手写HTML,CSS,JavaScript,并且通过link标签将CSS引入你 ...

  7. d3.js v5入门之——比例尺

    比例尺是可视化中一项基本任务的便捷抽象:将抽象数据的维映射到视觉表示.尽管最常用于对定量数据进行位置编码,例如将以米为单位的测量值映射到散点图中点的像素位置,但刻度实际上可以表示任何位置编码,例如发散 ...

  8. 用D3.js画树状图

    做项目遇到一个需求,将具有层级关系的词语用树状图的形式展示它们之间的关系,像这样: 或者是这样: 上面的图片只是样例,跟我下面的代码里面用的数据不同 网上有很多这种数据可视化展示的js控件,我这里选择 ...

  9. D3.js绘制树形图

    1.什么是D3: data-driven-document,翻译为数据驱动的文档,是一种由数据来决定绘图流程的程序设计模型.简单说,D3是一个JavaScript的函数库,用来做数据可视化(将数据的各 ...

最新文章

  1. linux查找技巧: find grep xargs linux系统信息查看大全
  2. 好玩的东西——一个代码片段
  3. [转] MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
  4. C++ Multisets
  5. 全球 android手机排行 2013,全球Android手机性能排行 三星Note 3夺魁
  6. MyBatis Generator Example.Criteria 查询条件复制
  7. Python-IndexError: list index out of range
  8. 【嘟嘟早教卡】 小程序源码分享带后台管理
  9. 你是农村人吗?小时候没有自来水,每天喝的是什么水?
  10. 全球最快!湖南大学天河超算存储系统!
  11. 清华大学计算机科学与技术专业设置,清华大学计算机科学与技术专业介绍
  12. Linux文件加密方式gzip和bzip
  13. 三、段地址与偏移地址
  14. linux只显示文件,linux命令行只显示文件或者文件夹
  15. SQL SEVER登录失败,无法连接服务器或已成功与服务器建立连接,但是在登录过程中发生错误。(Win10版本,SQL 2019)
  16. MySQL 服务器是什么_什么是 MySQL?
  17. Quartz(二) quartz测试
  18. 关于农业生态链平台的杂想
  19. 如何使用GMAP/GSNAP进行转录组序列比对
  20. 华为T8600可以删除的系统程序和定制程序

热门文章

  1. centos7安装pip
  2. linux mailxdingding机器人报警
  3. HDMI之EDID使用说明
  4. Showslow+Yslow+DynaTrace前端性能自动化执行机使用手册
  5. производство в смоленске кирпича
  6. matlab-基础 输出单引号
  7. 2022最新全网千图网素材解析网站工作原理,附带成品。
  8. 交叉线、直通线、反转线的区别与应用
  9. Web Work 简介
  10. _.chunk的用法