• D3.js 入门系列


    简介和安装

    近年来,可视化越来越流行,许多报刊杂志、门户网站、新闻、媒体都大量使用可视化技术,使得复杂的数据和文字变得十分容易理解,有一句谚语“一张图片价值于一千个字”,的确是名副其实。各种数据可视化工具也如井喷式地发展,D3 正是其中的佼佼者。

    D3 是什么

    D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档。听名字有点抽象,说简单一点,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。如果你不知道什么是 JavaScript ,请先学习一下 JavaScript,推荐阮一峰老师的教程。

    JavaScript 标准参考教程

    JavaScript 文件的后缀名通常为 .js,故 D3 也常使用 D3.js 称呼。D3 提供了各种简单易用的函数,大大简化了 JavaScript 操作数据的难度。由于它本质上是 JavaScript ,所以用 JavaScript 也是可以实现所有功能的,但它能大大减小你的工作量,尤其是在数据可视化方面,D3 已经将生成可视化的复杂步骤精简到了几个简单的函数,你只需要输入几个简单的数据,就能够转换为各种绚丽的图形。有过 JavaScript 基础的朋友一定很容易理解它。

    为什么要数据可视化

    现在有一组数据, 【 4 , 32 , 15 , 16 , 42 , 25 】 ,你能一眼看出它们的大小关系吗?当然这里的数据不算多,有那眼疾手快的家伙站出来说我能一眼看出来!但更直观的是用图形显示,如下图:

    通过图形的显示,能很清楚地知道他们的大小关系。当然,D3能力远不止如此,这只是一个很小的应用。把枯燥乏味复杂的数据,用简单明了的图形表示出来,这就是数据可视化

    D3 有多受欢迎

    D3 是一个开源项目,作者是纽约时报的工程师。D3 项目的代码托管于 GitHub(一个开发管理平台,目前已经是全世界最流行的代码托管平台,云集了来自世界各地的优秀工程师)。

    在 GitHub 上最受关注的项目有哪些呢?

    JQuery 的名声够大了,但排名第 6,D3 排名第 5。

    怎么学习和使用 D3

    学习 D3 最好的地方是: http://d3js.org/ ,当然里面都是英文的,然后就是本站O(∩_∩)O~。

    D3 是一个 JavaScript 函数库,并不需要通常所说的“安装”。它只有一个文件,在 HTML 中引用即可。有两种方法:

    (1)下载 D3.js 的文件: d3.zip

    解压后,在 HTML 文件中包含相关的 js 文件即可。

    (2)还可以直接包含网络的链接,这种方法较简单:

    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
    

    但使用的时候要保持网络连接有效,不能再断网的情况下使用。

    学习 D3 需要什么预备知识

    想要通过 D3 来开启数据可视化之旅的朋友,需要什么预备知识呢?

    • HTML:超文本标记语言,用于设定网页的内容
    • CSS:层叠样式表,用于设定网页的样式
    • JavaScript:一种直译式脚本语言,用于设定网页的行为
    • DOM:文档对象模型,用于修改文档的内容和结构
    • SVG:可缩放矢量图形,用于绘制可视化的图形

    路人甲:额,我需要学那么多才能开始学 D3 吗?心理压力有点点…大

    馒头华华:不必,完全可以直接学 D3,遇到不明白的地方,再看相关内容即可

    路人乙:HTML、CSS 啥的,我从来都没用过,也没有关系吗?

    馒头华华:只要在 W3School ,分别看看这几个词是什么意思,是用来干什么的,再看几个简单例子即可,没有必要全掌握了再学习 D3。

    需要什么工具

    制作网页常用的工具即可。

    记事本软件:Notepad++、Editplus、Sublime Text 等,选择自己喜欢的即可。

    浏览器:IE9 以上、Firefox、Chrome等,推荐用 Chrome

    服务器软件:Apache、Tomcat 等

    其中,服务器软件可能不是必须的,不过 D3 中有些函数需要将 HTML 文件放置于服务器目录下,才能正常使用,关于这点以后会再做说明。

    好了,可以开始你的 D3 之旅了。

    D3.js 入门系列 — 选择元素和绑定数据

     
     

    D3 允许将数据与被选择的元素绑定在一起,为根据数据来操作元素提供方便。

    如何选择元素

    在 D3 中,用于选择元素的函数有两个:

    • d3.select():是选择所有指定元素的第一个
    • d3.selectAll():是选择指定元素的全部

    这两个函数返回的结果称为选择集,常见用法如下。

    var body = d3.select("body"); //选择文档中的body元素
    var p1 = body.select("p");      //选择body中的第一个p元素
    var p = body.selectAll("p");    //选择body中的所有p元素
    var svg = body.select("svg");   //选择body中的svg元素
    var rects = svg.selectAll("rect");  //选择svg中所有的svg元素
    

    选择集和绑定数据通常是一起使用的。

    如何绑定数据

    D3 有一个很独特的功能:能将数据绑定到 DOM 上,也就是绑定到文档上。这么说可能不好理解,例如网页中有段落元素 p 和一个整数 5,于是可以将整数 5 与 p 绑定到一起。绑定之后,当需要依靠这个数据才操作元素的时候,会很方便。

    D3 中是通过以下两个函数来绑定数据的:

    • datum():绑定一个数据到选择集上
    • data():绑定一个数组到选择集上,数组的各项值分别与选择集的各元素绑定

    相对而言,data() 比较常用。

    假设现在有三个段落元素如下。

    <p>Apple</p>
    <p>Pear</p>
    <p>Banana</p>
    

    接下来分别使用 datum() 和 data(),将数据绑定到上面三个段落元素上。

    datum()

    假设有一字符串 China,要将此字符串分别与三个段落元素绑定,代码如下:

    var str = "China";
    
    var body = d3.select("body");
    var p = body.selectAll("p");
    
    p.datum(str);
    
    p.text(function(d, i){
        return "第 "+ i + " 个元素绑定的数据是 " + d;
    });
    

    绑定数据后,使用此数据来修改三个段落元素的内容,其结果如下:

    第 0 个元素绑定的数据是 China 
    第 1 个元素绑定的数据是 China 
    第 2 个元素绑定的数据是 China 

    在上面的代码中,用到了一个无名函数 function(d, i)。当选择集需要使用被绑定的数据时,常需要这么使用。其包含两个参数,其中:

    • d 代表数据,也就是与某元素绑定的数据
    • i 代表索引,代表数据的索引号,从 0 开始

    例如,上述例子中:第 0 个元素 apple 绑定的数据是 China。

    data()

    有一个数组,接下来要分别将数组的各元素绑定到三个段落元素上。

    var dataset = ["I like dogs","I like cats","I like snakes"];
    

    绑定之后,其对应关系的要求为:

    • Apple 与 I like dogs 绑定
    • Pear 与 I like cats 绑定
    • Banana 与 I like snakes 绑定

    调用 data() 绑定数据,并替换三个段落元素的字符串为被绑定的字符串,代码如下:

    var body = d3.select("body");
    var p = body.selectAll("p");
    
    p.data(dataset)
      .text(function(d, i){
          return d;
      });
    

    这段代码也用到了一个无名函数 function(d, i),其对应的情况如下:

    • 当 i == 0 时, d 为 I like dogs。
    • 当 i == 1 时, d 为 I like cats。
    • 当 i == 2 时, d 为 I like snakes。

    此时,三个段落元素与数组 dataset 的三个字符串是一一对应的,因此,在函数 function(d, i) 直接 return d 即可。

    结果自然是三个段落的文字分别变成了数组的三个字符串。

    I like dogs 
    I like cats 
    I like snakes
  • 相关阅读:
    STM32 定时器用于外部脉冲计数
    幸福是怎么来的
    STM32 I/O的耐压问题,中断问题,以及如何在Keil (RVMDK) 中观察程序的执行时间
    STM32输入捕获简介
    STM32 直流减速电机控制
    2013 初始
    js 为字符串添加样式
    js 实现页面显示钟表
    JavaScript 入门总结
    ADO.NET基本数据库编程
  • 原文地址:https://www.cnblogs.com/sea520/p/11872697.html
Copyright © 2020-2023  润新知