使用D3.js进行数据可视化

2024-05-03 19:44

本文主要是介绍使用D3.js进行数据可视化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

D3.js介绍

  D3.js是一个流行的JavaScript数据可视化库,全称为Data-Driven Documents,即数据驱动文档。它以数据为核心,通过数据来驱动文档的展示和操作。D3.js提供了丰富的API和工具,使得开发者能够创建出各种交互式和动态的数据可视化效果。

官方介绍网站:What is D3? | D3 by Observable

D3.js导入方式介绍

  在JavaScript中导入D3.js通常使用ESM+CDN、UMD+CDN和UMD+local这三种方式,其中:ESM (ES Modules):ESM是ECMAScript模块(ECMAScript Modules)的缩写,也被称为ES6模块,是JavaScript官方的模块化方案。它使用importexport语句进行模块的导入和导出,支持静态导入和动态导入。

CDN (Content Delivery Network):CDN即内容分发网络,是一种通过分布在多个地理位置的服务器来快速、有效地向用户分发内容的网络服务。使用CDN可以加快资源的加载速度,提高用户体验。

UMD (Universal Module Definition):UMD是一种通用的模块定义方式,旨在使JavaScript库或模块能够在多种环境中使用,包括浏览器全局变量方式、AMD环境和CommonJS环境(如Node.js)。UMD允许库或模块在各种不同的JavaScript模块加载器和环境中运行。

local:将JavaScript库或模块直接保存在本地项目中,而不是从外部CDN或其他远程位置加载。

D3.js导入方式1:ESM+CDN
<!DOCTYPE html>
<div id="container"></div>
<script type="module">import * as d3 from "https://cdn.jsdelivr.net/npm/d3@7/+esm";// 一大堆代码</script>
D3.js导入方式2:UMD+CDN 
<!DOCTYPE html>
<div id="container"></div>
<script src="https://cdn.jsdelivr.net/npm/d3@7"></script>
<script type="module">// 一大堆代码
</script>
 D3.js导入方式3:UMD+local
<!DOCTYPE html>
<div id="container"></div>
<script src="/d3.v7.js"></script>
<script type="module">// 一大堆代码
</script>

D3.js文件官方下载地址:Getting started | D3 by Observable

使用D3.js绘制柱形图
<!DOCTYPE html>  
<html>  
<head>  <meta charset="utf-8">  <title>GGBoy</title>  <script src="/d3.v7.js"></script>  
</head>  
<body>  <script>  const width = 640;  const height = 400;  const marginTop = 20;  const marginRight = 20;  const marginBottom = 30;  const marginLeft = 40;  const innerWidth = width - marginLeft - marginRight;  const innerHeight = height - marginTop - marginBottom;  const svg = d3.select("body").append("svg")  .attr("width", width)  .attr("height", height);  const plotArea = svg.append("g")  .attr("transform", `translate(${marginLeft},${marginTop})`);  const x = d3.scaleBand()  .domain(["Category1", "Category2", "Category3"]) .padding(0.1);const y = d3.scaleLinear()  .domain([0, 100]) .range([innerHeight, 0]);  // Add the x-axis.  plotArea.append("g")  .attr("transform", `translate(0,${innerHeight})`)  .call(d3.axisBottom(x));  // Add the y-axis.  plotArea.append("g")  .call(d3.axisLeft(y));  const data = [  { category: "Category1", value: 50 },  { category: "Category2", value: 75 },  { category: "Category3", value: 30 }  ];  plotArea.selectAll(".bar")  .data(data)  .enter().append("rect")  .attr("class", "bar")  .attr("x", d => x(d.category))  .attr("width", x.bandwidth())  .attr("y", d => y(d.value))  .attr("height", d => innerHeight - y(d.value))  .attr("fill", "steelblue");  </script>  
</body>  
</html>

 使用D3.js绘制曲线图
<!DOCTYPE html>  
<html>  
<head>  <title>GGBoy</title>  
</head>  
<body>  <div id="container" style="width: 600px; height: 400px;"></div>  <script type="module">  import * as d3 from "https://cdn.jsdelivr.net/npm/d3@7/+esm";  var data = [  {date: '2024-05-01', close: 100},  {date: '2024-05-02', close: 110},  {date: '2024-05-03', close: 95},  {date: '2024-05-04', close: 120},  {date: '2024-05-05', close: 105}  ];  var parseDate = d3.timeParse("%Y-%m-%d");  data.forEach(function(d) {  d.date = parseDate(d.date);  });  const width = 600;  const height = 400;  const marginTop = 20;  const marginRight = 20;  const marginBottom = 30;  const marginLeft = 40;  var x = d3.scaleTime()  .range([marginLeft, width - marginRight])  .domain(d3.extent(data, function(d) { return d.date; }));  var y = d3.scaleLinear()  .range([height - marginBottom, marginTop])  .domain(d3.extent(data, function(d) { return d.close; }));  var svg = d3.select("#container").append("svg")  .attr("width", width)  .attr("height", height);  svg.append("g")  .attr("transform", `translate(0,${height - marginBottom})`)  .call(d3.axisBottom(x));  svg.append("g")  .attr("transform", `translate(${marginLeft},0)`)  .call(d3.axisLeft(y));  var line = d3.line()  .x(function(d) { return x(d.date); })  .y(function(d) { return y(d.close); })  .curve(d3.curveBasis);  svg.append("path")  .datum(data)  .attr("class", "line")  .attr("d", line)  .attr("stroke", "blue")  .attr("stroke-width", 2)  .attr("fill", "none");   </script>  
</body>  
</html>

 使用D3.js实现网页时钟
<!DOCTYPE html>  
<html lang="zh">  
<head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>GGBoy</title>  <script src="https://cdn.jsdelivr.net/npm/d3@7"></script>  <style>  .time {  font-family: Cursive;  font-size: 40px;  stroke: black;  stroke-width: 2;  fill: none; }  </style>  
</head>  
<body>  <svg width="600" height="400"></svg> <script>  function getTime() {  var time = new Date();  var hour = time.getHours();  var minute = time.getMinutes();  var second = time.getSeconds();  hour = hour < 10 ? '0' + hour : hour;minute = minute < 10 ? '0' + minute : minute;  second = second < 10 ? '0' + second : second;  return hour + ':' + minute + ':' + second;  }  var svg = d3.select("svg"); // 选择SVG元素  var timeText = svg.append("text")    .attr("x", 100)    .attr("y", 100)    .attr("class", "time")  .text(getTime());  function updateTime() {  timeText.text(getTime());  }  setInterval(updateTime, 1000);  </script>  
</body>  
</html>

这篇关于使用D3.js进行数据可视化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957502

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件