D3.js系列 --- 初识

D3.js(Data-Driven Documents)即被数据驱动的文档,它是一个用于根据数据来操作文档的JavaScript库。相比于echart, antv等其他图表库,它算是一个比较底层的数据可视化工具。它不提供任何一种现成的图表,只做最基础的东西,所有的图表都需要我们在它的库里挑选合适的方法进行构建。在一切即数据的今天,我们更需要做到让数据活起来,展现数据之美。

简介

犹抱琵琶半遮面,千呼万唤中终于要接触数据可视化了。数据可视化越来越流行,让复杂的数据和文字变得十分容易理解。作为其中的佼佼者,当然要先侃一下我们的D3了。

D3.js 是基于数据驱动文档工作方式的一款JavaScript函数库,主要用于网页作图、生成互动图形,是最流行的可视化库之一,它被很多其他的表格插件所使用。D3使你有能力借助HTML,SVG和CSS来生动地可视化各种数据。一句话,D3根据现有的web标准,将强大的可视化,动态交互和数据驱动的DOM操作方法完美结合,进而来制作炫目的可视化效果。

比较一下D3和JQuery

同是操作DOM的,就少不了被拿出来比较一下:

  • D3是数据驱动的,JQuery不是:我们使用JQuery选择器$()直接操纵元素;D3通过专有的datum(),data(),enter()和exit()方法提供数据和回调,然后操作元素
  • D3用来做数据可视化,jQuery用来创建web应用

使用

在这里下载最新的版本(5.5.0):

直接链接到最新版本:

<script src="https://d3js.org/d3.v5.min.js"></script>

NPM:

npm install d3

Yarn:

yarn add d3

浏览器支持情况

D3支持的主流浏览器不包括IE8及以前的版本。D3在Chrome、Firefox、Safari、Opera和IE9上都能正常使用。D3的大部分组件可以在旧的浏览器运行。

简单示例(实现一个简单的图表)

柱形图简明、醒目,是一种简单常用的图表,主要构成部分有矩形、坐标轴和文字说明。这个例子只绘制矩形的部分。

假设给了我们一组数据,[30, 86, 168, 281, 303, 365],根据图片我们可以直观的看出这些数据的关系

下面就让我们一步一步的去实现它。

选择集

在jQuery中我们使用选择器$()去选择元素,在d3中我们引入一个新的名词叫做选择集。使用 d3.select() 或 d3.selectAll() 选择元素后返回的对象,就是选择集。

  • d3.select() - 从当前文档中选择一个元素
  • d3.selectAll() - 从当前文档中选择多个元素
  • selection.style() - 取得或设置样式属性

D3中我们可以像jQuery一样使用链式语法

d3.select()
  .selectAll()
  .style(‘color‘, ‘red‘);

数据绑定

D3中我们可以把数据绑定到DOM上,它可以通过函数来实现:

  • selection.datum() - 取得或设置单个元素的数据
  • selection.data() - 取得或设置一组元素的数据

以下是一个使用说明:

var dataset = [‘Beijing‘, ‘Shanghai‘, ‘Tianjin‘, ‘Chongqing‘];
var p = body.selectAll(‘p‘);
p.data(dataset)
.text(function(d, i) {
  return d;
});

这样就把数据绑定到了p标签上,函数function(d, i){}包含两个参数,d代表数据,这里就是与元素绑定的数据;i代表索引,从0开始

画布

要绘图,首先需要的是一块"画布"。HTML5中提供了两种强有力的"画布": SVG和Canvas。这里不多做解释。

D3提供了众多的SVG图形的生成器,我们在SVG画布中实现它。

添加画布如下:

let svg = d3.select(‘body‘)  //选择文档中的body元素
  .append(‘svg‘);     //添加一个svg元素
  

绘制矩形

绘制矩形之前我们的SVG元素里面还没有rect元素,我们就需要自己为它添加补全,需要链式使用selection.enter()和selection.append()来实现。

svg.selectAll("rect")
  .data(data)  // 绑定数据
  .enter()      // 为缺失的元素返回占位符
  .append("rect")    // 添加足够数量的矩形元素
  .attr("x",20 + ‘px‘)     //设置矩形的x轴和y轴位置
  .attr("y",function(d,i){
    return i * 28 + ‘px‘;
  })
  .style("width",function(d){  // 设置矩形的宽高
    return d + ‘px‘;
  })
  .style("height",26 + ‘px‘)
  .text(function(d) {
    return d;
  })
  

一个简单的柱形图就成功了,实现效果如下图

原文地址:https://www.cnblogs.com/levinhax/p/9374922.html

时间: 2024-08-04 01:20:45

D3.js系列 --- 初识的相关文章

D3.js系列——比例尺

比例尺是 D3 中很重要的一个概念.绘制图形时直接用数值的大小来代表像素不是一种好方法,本章正是要解决此问题. 一.为什么需要比例尺 上一章制作了一个柱形图,当时有一个数组,绘图时,直接使用 250 给矩形的宽度赋值,即矩形的宽度就是 250 个像素.此方式非常具有局限性,如果数值过大或过小,例如: var dataset_1 = [ 2.5 , 2.1 , 1.7 , 1.3 , 0.9 ]; var dataset_2 = [ 2500, 2100, 1700, 1300, 900 ]; 对

D3.js系列——动态效果和Update、Enter、Exit的理解

一.动态效果 D3 支持制作动态的图表.有时候,图表的变化需要缓慢的发生,以便于让用户看清楚变化的过程,也能给用户不小的友好感. 1.什么是动态效果 前面制作的图表是一蹴而就地出现,然后绘制完成后不再发生变化的,这是静态的图表. 动态的图表,是指图表在某一时间段会发生某种变化,可能是形状.颜色.位置等,而且用户是可以看到变化的过程的.例如,有一个圆,圆心为 (100, 100).现在我们希望圆的 x 坐标从 100 移到 300,并且移动过程在 2 秒的时间内发生.这种时候就需要用到动态效果,在

D3.js系列——交互式操作和布局

一.图表交互操作 与图表的交互,指在图形元素上设置一个或多个监听器,当事件发生时,做出相应的反应. 交互,指的是用户输入了某种指令,程序接受到指令之后必须做出某种响应.对可视化图表来说,交互能使图表更加生动,能表现更多内容.例如,拖动图表中某些图形.鼠标滑到图形上出现提示框.用触屏放大或缩小图形等等. 用户用于交互的工具一般有三种:鼠标.键盘.触屏. 添加交互:对某一元素添加交互操作十分简单,代码如下: var circle = svg.append("circle"); circle

【 D3.js 入门系列 — 11 】 入门总结

D3 新专题首页 一转眼,这个入门系列已经积累了二十二篇文章之多,我想作为 D3.js 这款数据可视化工具的入门来说已经足够了.相信仅仅要看完本系列.以后全然能够在辅以查询的情况下完毕大部分可视化工作. D3.js 最早的 v1.0 版本号是由 Michael Bostock 于2011年2月18日公布,其后经过多人的不断完好,眼下最新的版本号为 v3.4.11.从公布至今三年多的时间里,D3.js 在国外不断有人尝试并制作教程.成为了流行的数据可视化工具.可是眼下在国内能查询到中文资料还比較少

【 D3.js 入门系列 --- 9.6 】 打包图的制作

本人的个人博客为:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 打包图( Pack ),用于包含与被包含的关系,也表示各个对象的权重,通常用一圆套一圆来表示前者,用圆的大小来表示后者. 先看本节所使用的数据:  city2.json 这是各城市所属关系的数据.我们现在要用 D3 的 layout 来转换数据,使其容易进行可视化处理. var pack = d3.layout.pack() .size([ width, heigh

【 D3.js 入门系列 --- 7 】 理解 update, enter, exit 的使用

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 在前面几节中反复出现了如下代码: svg.selectAll("rect") .data(dataset) .enter() .append("rect") 当所选择的 rect 数量比绑定的数据 dataset 的数量少的时候,通常会用到以上代码,这一节就详细说说当被选择元素和数据数量不一致时该如何处理. 这一节将涉及到三个函数.

【 D3.js 进阶系列 】 进阶总结

进阶系列的文章从去年10月开始写的,晃眼又是4个多月了,想在年前总结一下. 首先恭祝大家新年快乐.今年是羊年吧.前段时间和朋友聊天,聊到十二生肖里为什么没猫,我张口就道:不是因为十二生肖开会的时候猫迟到了吗? 呵呵,不知道这是谁给我灌输的观点.o(>﹏<)o 进阶系列的文章分为两部分,文章前括号里写有: [D3.js 进阶系列] [D3.js 选择集与数据详解] 虽然称之为"进阶",但并不是说一定要看完"入门"才能看.由于本人能力有限,不能很好地整理成由

【 D3.js 入门系列 --- 10 】 地图的绘制

本人的个人博客为:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 地图的制作在 D3 中可以说是最重要的一环.因为在进行数据可视化时,很多情况都会和地图联系在一起,如中国各省的人口多少,GDP多少等,都可以和地图联系在一起. D3 中制作地图所需要的文件问 JSON 文件.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.关于 JSON 的语法格式,可以在: http://www.w3s

【 D3.js 入门系列 — 0 】 简介和安装

[ D3.js 入门系列 — 0 ] 简介和安装 发表于2014/06/12 近年来,可视化越来越流行,许多报刊杂志.门户网站.新闻.媒体都大量使用可视化技术,使得复杂的数据和文字变得十分容易理解,有一句谚语“一张图片价值于一千个字”,的确是名副其实.各种数据可视化工具也如井喷式地发展,D3 正是其中的佼佼者. 1. D3 是什么 D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档.听名字有点抽象,说简单一点,其实就是一个 JavaScript