当前位置: 首页 > news >正文

D3 基础1

D3

D3.js (Data-Driven Documents) 是一个基于 JavaScript 的库,用于生成动态、交互式数据可视化。它通过操作文档对象模型 (DOM) 来生成数据驱动的图形。官方网站是 https://d3js.org/

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>D3.js Tutorial</title><script src="https://d3js.org/d3.v7.min.js"></script></head><body><p>abc</p><script>// 选择第一个匹配的元素d3.select("body").style("background-color", "lightblue");// 选择所有匹配的元素d3.selectAll("p").style("color", "red");</script></body>
</html>

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>D3.js Tutorial</title><script src="https://d3js.org/d3.v7.min.js"></script></head><body><script>// 绑定数据并创建元素const dataset = [10, 20, 30, 40, 50];const svg = d3.select("body").append("svg").attr("width", 500).attr("height", 500);for (let i = 0; i < dataset.length; i++) {svg.append("circle").attr("cx", (i + 1) * 60).attr("cy", 250).attr("r", dataset[i]).attr("fill", "blue");}svg.selectAll("circle").data(dataset).enter().append("circle").attr("cx", (d, i) => (i + 1) * 60).attr("cy", 250).attr("r", (d) => d).attr("fill", "blue");</script></body>
</html>

缩放

const svg = d3.select("svg");
const zoom = d3.zoom().scaleExtent([1, 10]).on("zoom", zoomed);svg.call(zoom);function zoomed(event) {svg.attr("transform", event.transform);
}

拖拽

      const drag = d3.drag().on("start", dragstarted).on("drag", dragged).on("end", dragended);svg.selectAll("circle").call(drag);function dragstarted(event, d) {d3.select(this).raise().attr("stroke", "black");}function dragged(event, d) {d3.select(this).attr("cx", (d.x = event.x)).attr("cy", (d.y = event.y));}function dragended(event, d) {d3.select(this).attr("stroke", null);}

例1  柱状图

以下值[30, 86, 168, 281, 303, 365],作为y的值,width=500,height=300,画柱状图,柱子宽度均分width,每个柱子间距1。不需要坐标。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>D3.js Tutorial</title><script src="https://d3js.org/d3.v7.min.js"></script></head><body><script>// 绑定数据并创建元素const data = [30, 86, 168, 281, 303, 365];const width = 500;const height = 300;const barWidth = width / data.length;const svg = d3.select("body").append("svg").attr("width", width).attr("height", height);svg.selectAll("rect").data(data).enter().append("rect").attr("width", barWidth - 1).attr("height", (d) => d).attr("x", (d, i) => i * barWidth).attr("y", (d) => height - d).attr("fill", "teal");</script></body>
</html>

例2 折线

利用上面的数据画折线

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>D3.js Tutorial</title><script src="https://d3js.org/d3.v7.min.js"></script></head><body><script>const data = [30, 86, 168, 281, 303, 365];const width = 500;const height = 300;const x = d3.scaleLinear().domain([0, data.length - 1]).range([0, width]);const y = d3.scaleLinear().domain([0, d3.max(data)]).range([height, 0]);const line = d3.line().x((d, i) => x(i)).y((d) => y(d));const svg = d3.select("body").append("svg").attr("width", width).attr("height", height);svg.append("path").datum(data).attr("fill", "none").attr("stroke", "steelblue").attr("stroke-width", 1.5).attr("d", line);</script></body>
</html>


http://www.mrgr.cn/news/80390.html

相关文章:

  • More Effective C++之异常Exceptions_上
  • Redis应用—4.在库存里的应用
  • Leecode刷题C语言之最近的房间
  • 《Java核心技术I》Swing用户界面组件
  • Python Segmentation fault错误定位办法
  • MyBatis一二级缓存的区别?
  • vue中slot插槽的使用(默认插槽,具名插槽,作用域插槽)
  • QT c++ 测控系统 一套报警规则(上)
  • 【代码随想录day59】【C++复健】 47. 参加科学大会(dijkstra(堆优化版)精讲 );94. 城市间货物运输 I
  • C语言(构造类型)
  • OpenIPC开源FPV之Adaptive-Link地面站代码解析
  • 锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测,附锂电池最新文章汇集
  • PHP8.4下webman直接使用topthink/think-orm
  • wazuh-modules-sca-scan
  • 【Qt】Qt+Visual Studio 2022环境开发
  • Guava 提供了集合操作 `List`、`Set` 和 `Map` 三个工具类
  • <数据集>输电线塔杂物识别数据集<目标检测>
  • uniapp滚动消息列表
  • OpenCV函数及其应用
  • dev类似于excel的数据编辑
  • Next.js流量教程:核心 Web Vitals的改善
  • ARM Cortex-A7 MPCore 架构
  • XML基础学习
  • 【时间序列分析】皮尔森相关系数理论基础及python代码实现
  • Spring Framework 路径遍历漏洞复现(CVE-2024-38819)
  • Redis篇-21--运维篇3-集群(分片,水平扩展,高可用,集群配置案例,扩展哨兵案例)