我的编程空间,编程开发者的网络收藏夹
学习永远不晚

d3从入门到出门

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

d3从入门到出门

前言

基于d3js 5.5版本基础教程

环境配置

下载最新d3js文件, 参考: d3js官网

当前版本5.5, d3js v4与v3之间的api有一定的差异。

选择元素

d3主要有两个选择器

  • select

    选择相应的dom元素, 如果有多个, 选择第一个

  • selectAll

    选择所有的指定的dom元素.

通过选择器可以选择相应得dom元素, 而选择器的语法基本就是css选择器的语法.

css选择器语法: http://www.w3school.com.cn/c***ef/css_selectors.asp

增删查改

假设网页有以下元素, 关于d3的元素操作都将引用本段落

// 省略html,head等标签
<body>
    <input type="checkbox">
    <p>段落1</p>
    <p>段落2</p>
    <p>段落3</p>
    <svg><rect></rect></svg>

</body>

元素增加

  • append

    在选择的元素中增加一个子元素,

    示例: 
    d3.select("body").append("p") //将会在svg后面增加一个内容为空的p元素
  • insert

    在选择的元素里面或者前面增加一个元素,

    示例1:
    d3.select("body").insert("p") //与append方法一致
    
    示例2:
    d3.select("body").insert("p", "p") //第一个参数为要插入的元素, 第二个元素为before, 即首先通过第二个参数选择相应位置,在这个选择的元素之前插入一个元素
    

    内容修改

  • text

    修改元素的文本内容

    示例:
    d3.select("p").text("段落一修改后的内容") // 将段落一的内容修改为text函数传入的参数,如果传入的文本包含html标签,则会被转义
  • html

    修改元素内容

    示例:
    d3.select("p").html("<div>段落一修改后的内容</div>") // 将段落一的内容修改为text函数传入的参数,如果传入的文本包含html标签,不会被转义

属性增加修改

  • attr

    增加或者修改属性(如果属性已存在)

    示例:
    d3.select("svg rect").attr("width", 200) //将选择的rect元素width属性修改为200
  • style

    增加或这修改样式(如果属性已存在)

    示例:
    d3.selectAll("p").style("color", "#ff0000") //选择所有p元素,并将其文字颜色设置为红色
  • property

    增加或这修改样式(如果属性已存在)

    示例:
    d3.select("input").property("checked",true); //选择第一input元素,将checked属性设置为true

元素删除

  • remove

    将选定的元素删除

    示例:
    d3.select("p").remove //选择第一个p元删除

链式操作

d3与jQuery有一样的链式操作, 只要操作合法你可以一直链接下去

示例:
//首先选择第一个p元素然后将元素的文本内容修改为'修改后内容',并将其文字颜色设置为红色
d3.select("p")
  .text("修改后内容")
  .style("color", "red") 

数据绑定与加载

数据绑定

  • datum

    将一个数据绑定到所有选择的元素上

    // 通过datum元素将"datum"数据传入, 在text方法里面传入一个箭头函数,而箭头函数直接返回数据
    d3.selectAll("p")
      .datum("datum")
      .text((d, i) => d)
    
    // 修改后的内容如下
    ...省略不相内容
    <p>datum</p>
    <p>datum</p>
    <p>datum</p>
  • data

    传入一组数据,分别于选择的元素一一绑定

    // 通过datum元素将"datum"数据传入, 在text方法里面传入一个箭头函数,而箭头函数直接返回数据
    d3.selectAll("p")
      .data([1,2,3])
      .text((d, i) => d)
    
    // 修改后的内容如下
    ...省略不相关内容
    <p>1</p>
    <p>2</p>
    <p>3</p>
  • update, enter, exit

参考图片内容:

d3从入门到出门

网络数据加载

d3内置数据加载的方法,可以解析比较常见的数据格式,主要有以下四种,这里主要以csv文件个数数据作为示例

  • d3.csv
  • d3.json
  • d3.tsv
  • d3.xml
csv文件内容如下
//data.csv
name, age
zhangsan, 11
wangwu, 22
lisi, 33

// 加载csv
d3.csv("data.csv", (data) => {
    console.log(data)
})

// 输出, d3已经将csv格式的数据解析成可识别的对象
{name: "zhangsan", " age": " 11"}
{name: "wangwu", " age": " 22"}
{name: "lisi", " age": " 33"}

事件

d3自然也可以监听相应的事件。
常用事件如下:

// 选择所有的p元素,当鼠标移到相应的p元素上面,p元素的字体颜色就会变成橙色,移出的时候就会变成红色
d3.selectAll("p")
      .on("mouseover", function(){
          d3.select(this)
            .style("color", "orange");
      })
      .on("mouseout", function() {
        d3.select(this)
            .style("color", "red");
      })

动画

可以通过以下四个过程使得选定的元素生成动态效果

  • transition

    启动动画效果

  • duration

    动画时间,单位为毫秒

  • ease

    过渡方式, 默认为线性过渡

  • delay

    延迟时间,在指定的一段时间后才启动动画

// 选中第一个元素,先延迟延迟一秒,动画时间2秒,在两秒内同时从默认的颜色渐变到红色,字体大小从默认大小变成50px
d3.select("p")
      .transition()
      .delay(1000)
      .duration(2000)
      .style("background-color", "red")
      .style("font-size", "50px")

缩放

由于使用的数值与图片中的长宽数值有一定的差异,比如,图片长度为500,但是数值都是在10以内, 我们做出来的图一定是需要尽量的填充整个视图,所以需要对源数据做一定的缩放, 下面介绍两类缩放,d3本身有很多的缩放函数。

线性缩放

var data = [100, 400, 300, 900, 850, 1000];

var scale = d3.scaleLinear()
            // 源数据数值范围
            .domain([0, d3.max(data)])
            // 真实距离大小范围,一般是展示区长宽
            .range([0, 500]);
console.log(scale(20))
console.log(scale(800))
console.log(scale(1000))

输出
10
400
500

离散缩放

// 常用于选区颜色
var index = [0, 1, 2, 3, 4]
var color = ["red", "blue", "green", "yellow", "black"]
var ordinal = d3.scaleOrdinal()
                .domain(index)
                .range(color)
console.log(ordinal(1))
console.log(ordinal(4))
console.log(ordinal(100))

//输出
blue
black
blue

坐标轴

常见图标展示一般都会带有坐标轴,因为坐标轴是一个很常用的功能,所以d3有内置的函数用于生成坐标轴

可选坐标轴

  • axisTop
  • axisRight
  • axisBottom
  • axisLeft

上面的上下左右主要指坐标周的刻度文字的位置,比如axisTop是指文字在横轴上面

var width = 400,
    height = 100;

var data = [10, 15, 20, 25, 30];

// 在body元素内插入一个svg元素 
var svg = d3.select("body")
            .append("svg")
            .attr("width", width)
            .attr("height", height);

// 创建一个线性缩放函数
var scale = d3.scaleLinear()
              .domain([d3.min(data), d3.max(data)])
              .range([0, width - 100]);

// 创建一个坐标轴,需传入缩放函数
var x_axis = d3.axisBottom()
               .scale(scale);

//在svg函数里面加入一个g元素,并创建坐标轴
svg.append("g")
   .call(x_axis);

坐标轴微调

//旋转坐标轴文字
d3.selectAll("svg > g  text")
  .attr("transform", "rotate(45)")
  // 文字沿当前方向距离轴位置大小
  .attr("y", 20)

柱状图

柱状图示例
参考: http://www.tutorialsteacher.com/d3js/create-bar-chart-using-d3js

饼图

参考: http://www.tutorialsteacher.com/d3js/create-pie-chart-using-d3js

后记

之所以叫做从入门到出门, 是因为本人学得很快, 忘得更快。

参考链接

https://d3js.org/
http://www.tutorialsteacher.com/d3js
http://www.ourd3js.com/wordpress/396/

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

d3从入门到出门

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

d3从入门到出门

前言基于d3js 5.5版本基础教程环境配置下载最新d3js文件, 参考: d3js官网当前版本5.5, d3js v4与v3之间的api有一定的差异。选择元素d3主要有两个选择器select选择相应的dom元素, 如果有多个, 选择第一个
2023-01-31

D3.js入门之D3 DataJoin的使用

DataJoin(数据连接)是D3中很重要的一个概念。D3是基于数据操作DOM的js库,DataJoin使我们能够根据现有 HTML 文档中的数据集注入、修改和删除元素。本文主要和大家详细聊聊DataJoin的使用,感兴趣的可以学习一下
2022-11-13

Jupyter导出PDF从入门到绝望(已

问题描述我在使用jupyter lab的时候,想要把我的代码和结果导出成pdf格式的(由于里面有图片,所以不想导出成html)。然后报错:然后我用pip安装了pandoc,发现并没有什么luan用。并且好像跟报错所指的pandoc不一样。反
2023-01-31

深入浅出Node.js Socket.io库:从入门到精通

深入浅出Node.js Socket.io库,从入门到精通,带您全面了解Socket.io库的使用方法和技巧。
深入浅出Node.js Socket.io库:从入门到精通
2024-02-11

Python从入门到放弃

01 计算机基础之编程02 计算机组成原理03 计算机操作系统04 编程语言分类05 Python和Python解释器06 执行Python程序的两种方式07 Python集成开发环境08 变量09 内存管理10 定义变量的三个特征11 数
2023-01-31

Pyhon从入门到致命

第一章 基础           1.python2和python3的区别    2.数据类型      2.1 int 整型      2.2 str 字符串不可变类型      2.3 bool 布尔类型      2.4 list 列
2023-01-31

GNS3从入门到精通

GNS3是一款优秀的具有图形化界面的模拟器。可以运行在多平台上(Windows,Linux,MacOS等)。其最大的特点就是搭建拓扑极其简单,且支持保存startup-config,供下次实验中继续导入使用,而且所有设备导入时间在1分钟内即
2023-01-31

Python3 从入门到开车

引:此文是自己学习python过程中的笔记和总结,适合有语言基础的人快速了解python3和没基础的作为学习的大纲,了解学习的方向. 知识点;笔记是从多本书和视频上学习后的整合版。最近开始整理python的资料,博主建立了一个qq群,希望给
2023-01-31

Mysql 从入门到遗忘

Made By Herolh目录[TOC]一、MySQL是什么:服务端客户端Mysql数据库Mysql是最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的RDBMS(Relational Database Management System:
2017-08-02

Helm 从入门到实践

Helm 是 Kubernetes 的软件包管理工具。本文需要读者对 Docker、Kubernetes 等相关知识有一定的了解。 本文将介绍 Helm 中的相关概念和基本工作原理,并通过一些简单的示例来演示如何使用Helm来安装、升级、回
2023-01-31

python从入门到放弃(一)

python解释器的环境搭建上一篇简单介绍了一下pythonpython该如何使用呢专业点说我们需要下载一个python解释器,简单点说就是下个python首先呢,找到python官网点这儿进去以后点下载(电脑已经装过3.7,所以这里用3.
2023-01-31

python从入门到放弃(二)

ASCII码:主要用来显示英文和其他西欧语言,用8位来表示,也就是一个字节,最多只能显示256个符号UNICODE:也叫万国码,为了解决传统的字符编码方案的局限而产生的,它为每种语言的每个字符都设定了二进制编码,最少用16位来表示,也就是两
2023-01-31

J2EE 5从入门到精通

J2EE 5从入门到精通Java 2 Enterprise Edition (J2EE)入门学习指南: Detail:J2EE 5从入门到精通[@more@]
2023-06-03

Python从入门到放弃(Mac) -

1. First of all, install python, I chose the latest version. Download: https://www.python.org/downloads/mac-osx/ 首先安装啦,下
2023-01-31

用VUE D3.js构建交互式数据可视化应用:从入门到精通

: 通过本文,您将深入了解如何使用VUE D3.js构建交互式数据可视化应用,从基本配置到常见图表类型,再到高级互动功能,循序渐进,让您掌握D3.js在VUE框架中的应用技巧,助力您打造更具洞察力的数据可视化体验。
用VUE D3.js构建交互式数据可视化应用:从入门到精通
2024-02-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录