当前位置:   article > 正文

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

d3js大数据可视化
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
  1. <!DOCTYPE html>
  2. <div id="container"></div>
  3. <script type="module">
  4. import * as d3 from "https://cdn.jsdelivr.net/npm/d3@7/+esm";
  5. // 一大堆代码
  6. </script>
D3.js导入方式2:UMD+CDN 
  1. <!DOCTYPE html>
  2. <div id="container"></div>
  3. <script src="https://cdn.jsdelivr.net/npm/d3@7"></script>
  4. <script type="module">
  5. // 一大堆代码
  6. </script>
 D3.js导入方式3:UMD+local
  1. <!DOCTYPE html>
  2. <div id="container"></div>
  3. <script src="/d3.v7.js"></script>
  4. <script type="module">
  5. // 一大堆代码
  6. </script>

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

使用D3.js绘制柱形图
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>GGBoy</title>
  6. <script src="/d3.v7.js"></script>
  7. </head>
  8. <body>
  9. <script>
  10. const width = 640;
  11. const height = 400;
  12. const marginTop = 20;
  13. const marginRight = 20;
  14. const marginBottom = 30;
  15. const marginLeft = 40;
  16. const innerWidth = width - marginLeft - marginRight;
  17. const innerHeight = height - marginTop - marginBottom;
  18. const svg = d3.select("body").append("svg")
  19. .attr("width", width)
  20. .attr("height", height);
  21. const plotArea = svg.append("g")
  22. .attr("transform", `translate(${marginLeft},${marginTop})`);
  23. const x = d3.scaleBand()
  24. .domain(["Category1", "Category2", "Category3"])
  25. .padding(0.1);
  26. const y = d3.scaleLinear()
  27. .domain([0, 100])
  28. .range([innerHeight, 0]);
  29. // Add the x-axis.
  30. plotArea.append("g")
  31. .attr("transform", `translate(0,${innerHeight})`)
  32. .call(d3.axisBottom(x));
  33. // Add the y-axis.
  34. plotArea.append("g")
  35. .call(d3.axisLeft(y));
  36. const data = [
  37. { category: "Category1", value: 50 },
  38. { category: "Category2", value: 75 },
  39. { category: "Category3", value: 30 }
  40. ];
  41. plotArea.selectAll(".bar")
  42. .data(data)
  43. .enter().append("rect")
  44. .attr("class", "bar")
  45. .attr("x", d => x(d.category))
  46. .attr("width", x.bandwidth())
  47. .attr("y", d => y(d.value))
  48. .attr("height", d => innerHeight - y(d.value))
  49. .attr("fill", "steelblue");
  50. </script>
  51. </body>
  52. </html>

 使用D3.js绘制曲线图
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>GGBoy</title>
  5. </head>
  6. <body>
  7. <div id="container" style="width: 600px; height: 400px;"></div>
  8. <script type="module">
  9. import * as d3 from "https://cdn.jsdelivr.net/npm/d3@7/+esm";
  10. var data = [
  11. {date: '2024-05-01', close: 100},
  12. {date: '2024-05-02', close: 110},
  13. {date: '2024-05-03', close: 95},
  14. {date: '2024-05-04', close: 120},
  15. {date: '2024-05-05', close: 105}
  16. ];
  17. var parseDate = d3.timeParse("%Y-%m-%d");
  18. data.forEach(function(d) {
  19. d.date = parseDate(d.date);
  20. });
  21. const width = 600;
  22. const height = 400;
  23. const marginTop = 20;
  24. const marginRight = 20;
  25. const marginBottom = 30;
  26. const marginLeft = 40;
  27. var x = d3.scaleTime()
  28. .range([marginLeft, width - marginRight])
  29. .domain(d3.extent(data, function(d) { return d.date; }));
  30. var y = d3.scaleLinear()
  31. .range([height - marginBottom, marginTop])
  32. .domain(d3.extent(data, function(d) { return d.close; }));
  33. var svg = d3.select("#container").append("svg")
  34. .attr("width", width)
  35. .attr("height", height);
  36. svg.append("g")
  37. .attr("transform", `translate(0,${height - marginBottom})`)
  38. .call(d3.axisBottom(x));
  39. svg.append("g")
  40. .attr("transform", `translate(${marginLeft},0)`)
  41. .call(d3.axisLeft(y));
  42. var line = d3.line()
  43. .x(function(d) { return x(d.date); })
  44. .y(function(d) { return y(d.close); })
  45. .curve(d3.curveBasis);
  46. svg.append("path")
  47. .datum(data)
  48. .attr("class", "line")
  49. .attr("d", line)
  50. .attr("stroke", "blue")
  51. .attr("stroke-width", 2)
  52. .attr("fill", "none");
  53. </script>
  54. </body>
  55. </html>

 使用D3.js实现网页时钟
  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>GGBoy</title>
  7. <script src="https://cdn.jsdelivr.net/npm/d3@7"></script>
  8. <style>
  9. .time {
  10. font-family: Cursive;
  11. font-size: 40px;
  12. stroke: black;
  13. stroke-width: 2;
  14. fill: none;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <svg width="600" height="400"></svg>
  20. <script>
  21. function getTime() {
  22. var time = new Date();
  23. var hour = time.getHours();
  24. var minute = time.getMinutes();
  25. var second = time.getSeconds();
  26. hour = hour < 10 ? '0' + hour : hour;
  27. minute = minute < 10 ? '0' + minute : minute;
  28. second = second < 10 ? '0' + second : second;
  29. return hour + ':' + minute + ':' + second;
  30. }
  31. var svg = d3.select("svg"); // 选择SVG元素
  32. var timeText = svg.append("text")
  33. .attr("x", 100)
  34. .attr("y", 100)
  35. .attr("class", "time")
  36. .text(getTime());
  37. function updateTime() {
  38. timeText.text(getTime());
  39. }
  40. setInterval(updateTime, 1000);
  41. </script>
  42. </body>
  43. </html>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/750293
推荐阅读
相关标签
  

闽ICP备14008679号