D3开发的基本框架步骤

D3.js 是一个功能强大的数据可视化库,用于在网页上创建复杂的图表和交互式图形。以下是一个基本的 D3.js 开发框架,包括了常见的步骤和代码示例,帮助你快速入门。

基本框架

  1. 引入 D3.js 库
  2. 设置 SVG 容器
  3. 加载数据
  4. 创建比例尺
  5. 绘制图形
  6. 添加轴
  7. 添加交互

示例效果图

在这里插入图片描述

示例代码

以下是一个完整的示例,展示如何使用 D3.js 创建一个简单的条形图:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><script src="https://d3js.org/d3.v6.min.js"></script><style>.bar {fill: steelblue;}.bar:hover {fill: brown;}</style>
</head>
<body><svg width="800" height="500"></svg><script>// 设置 SVG 容器的尺寸const svgWidth = 800;const svgHeight = 500;const margin = { top: 20, right: 30, bottom: 40, left: 50 };const width = svgWidth - margin.left - margin.right;const height = svgHeight - margin.top - margin.bottom;// 创建 SVG 容器const svg = d3.select("svg").attr("width", svgWidth).attr("height", svgHeight).append("g").attr("transform", `translate(${margin.left}, ${margin.top})`);// 加载数据const data = [{ label: "A", value: 30 },{ label: "B", value: 80 },{ label: "C", value: 50 },{ label: "D", value: 100 },{ label: "E", value: 40 }];// 创建比例尺const xScale = d3.scaleBand().domain(data.map(d => d.label)).range([0, width]).padding(0.2);const yScale = d3.scaleLinear().domain([0, d3.max(data, d => d.value)]).range([height, 0]);// 绘制条形图svg.selectAll("rect").data(data).enter().append("rect").attr("class", "bar").attr("x", d => xScale(d.label)).attr("y", d => yScale(d.value)).attr("width", xScale.bandwidth()).attr("height", d => height - yScale(d.value));// 添加轴const xAxis = d3.axisBottom(xScale);const yAxis = d3.axisLeft(yScale);svg.append("g").attr("transform", `translate(0, ${height})`).call(xAxis);svg.append("g").call(yAxis);// 添加交互svg.selectAll(".bar").on("mouseover", function(event, d) {d3.select(this).attr("fill", "brown");}).on("mouseout", function(event, d) {d3.select(this).attr("fill", "steelblue");});</script>
</body>
</html>

解释

  1. 引入 D3.js 库:

    <script src="https://d3js.org/d3.v6.min.js"></script>
    
  2. 设置 SVG 容器:

    const svgWidth = 800;
    const svgHeight = 500;
    const margin = { top: 20, right: 30, bottom: 40, left: 50 };
    const width = svgWidth - margin.left - margin.right;
    const height = svgHeight - margin.top - margin.bottom;const svg = d3.select("svg").attr("width", svgWidth).attr("height", svgHeight).append("g").attr("transform", `translate(${margin.left}, ${margin.top})`);
    
  3. 加载数据:

    const data = [{ label: "A", value: 30 },{ label: "B", value: 80 },{ label: "C", value: 50 },{ label: "D", value: 100 },{ label: "E", value: 40 }
    ];
    
  4. 创建比例尺:

    const xScale = d3.scaleBand().domain(data.map(d => d.label)).range([0, width]).padding(0.2);const yScale = d3.scaleLinear().domain([0, d3.max(data, d => d.value)]).range([height, 0]);
    
  5. 绘制图形:

    svg.selectAll("rect").data(data).enter().append("rect").attr("class", "bar").attr("x", d => xScale(d.label)).attr("y", d => yScale(d.value)).attr("width", xScale.bandwidth()).attr("height", d => height - yScale(d.value));
    
  6. 添加轴:

    const xAxis = d3.axisBottom(xScale);
    const yAxis = d3.axisLeft(yScale);svg.append("g").attr("transform", `translate(0, ${height})`).call(xAxis);svg.append("g").call(yAxis);
    
  7. 添加交互:

    svg.selectAll(".bar").on("mouseover", function(event, d) {d3.select(this).attr("fill", "brown");}).on("mouseout", function(event, d) {d3.select(this).attr("fill", "steelblue");});
    

总结

这个基本框架涵盖了 D3.js 开发中的常见步骤,包括设置 SVG 容器、加载数据、创建比例尺、绘制图形、添加轴和交互。通过这个框架,你可以快速创建各种数据可视化图表。如果你有更复杂的需求,可以在此基础上进行扩展和定制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/17884.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

正则表达式完全指南,总结全面通俗易懂

目录 元字符 连接符 限定符 定位符 修饰符&#xff08;标记&#xff09; 运算符优先级 普通字符集及其替换 零宽断言 正向先行断言 负向先行断言 正向后发断言 负向后发断言 正则表达式在线测试: 正则在线测试工具 元字符 字符描述\d 匹配一个数字字符。等价于 …

对象的初步认识

#对象可组织数据&#xff08;如统计数据的表格&#xff09; 下以表格为例 1.设计一个表格:(None为初始值设定&#xff0c;表示无) class a; ##1None ##2None 2.创建一个表格 变量a 3.对对象的属性进行赋值 变量.##1"##" 变量.##2"##" 4.查询对象中…

Linux驱动开发第1步_了解STM32MP157D

了解STM32MP157D有哪些硬件资源&#xff0c;为以后进行Linux驱动开发做准备。 STM32MP157A/D器件基于高性能双核ArmCortex-A7 32位RISC内核&#xff0c;工作频率高达800 MHz。Cortex-A7处理器&#xff1a;每个CPU具有32kbyte L1指令缓存&#xff0c;每个CPU具有32kbyte L1数据…

w039基于Web足球青训俱乐部管理后台系统开发

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…

windows C#-编写 C# LINQ 查询(上)

介绍性的语言集成查询 (LINQ) 文档中的大多数查询是使用 LINQ 声明性查询语法编写的。 但是在编译代码时&#xff0c;查询语法必须转换为针对 .NET 公共语言运行时 (CLR) 的方法调用。 这些方法调用会调用标准查询运算符(名称为 Where、Select、GroupBy、Join、Max 和 Average …

c++入门->类的定义以及this详细解析

1.对象的定义 可以在内部定义变量还有函数&#xff0c;而其中的public是声明这里面的东西是共有的&#xff0c;可以调用也可以修改&#xff0c;但是private则是声明这里面的东西是私有的不可以被改变的&#xff0c;但是在类里面共有的是可以使用私有的。 在对象中默认都是私有…

SAP- 不写代码创建报表

创建报表 点击报保存&#xff0c;表Z0708创建完成 关联三张数据库底表 点击返回 点击报保存&#xff0c;表Z0708创建完成 创建报表

从PE结构到LoadLibrary

从PE结构到LoadLibrary PE是Windows平台主流可执行文件格式,.exe , .dll, .sys, .com文件都是PE格式 32位的PE文件称为PE32&#xff0c;64位的称为PE32&#xff0c;PE文件格式在winnt.h头中有着详细的定义&#xff0c;PE文件头包含了一个程序在运行时需要的所有信息&#xff…

聚类分析 | MSADBO优化Spectral谱聚类优化算法

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于改进正弦算法引导的蜣螂优化算法(MSADBO)优化Spectral谱聚类&#xff0c;matlab代码&#xff0c;直接运行! 创新独家&#xff0c;先用先发&#xff0c;注释清晰&#xff0c;送MSADBO参考文献!优化参数 优化后的带…

【C++】构造与析构函数

目录&#xff1a; 一、 This指针  &#xff08;一&#xff09;使用方法&#xff1a; 二、类的默认成员函数 三、构造函数  &#xff08;一&#xff09;构造函数的特点 四、析构函数 &#xff08;一&#xff09;析构函数的特点 正文 一、 This指针 在c语言中我们调用函…

2021TCSVT,VDM-DA:面向无源数据域自适应的虚拟域建模

原文标题&#xff1a;VDM-DA: Virtual Domain Modeling for Source Data-free Domain Adaptation 中文标题&#xff1a;VDM-DA&#xff1a;面向无源数据域自适应的虚拟域建模 1、Abstract 领域适应旨在利用标签丰富的领域&#xff08;源领域&#xff09;来帮助标签稀缺领域&…

MySQL数据库1——数据库概论

一.数据库概论 1.数据库 数据库&#xff08;DataBase&#xff0c;DB&#xff09;&#xff1a;是长期存储在计算机内、有组织的、统一管理的相关数据的集合。简单来说&#xff0c;它就是一个存储各种数据的仓库&#xff0c;且存储过程不是随便而是有组织的。 数据库管理系统&am…

英伟达Tensor Core技术架构原理分析

英伟达Tensor Core架构技术原理 英伟达的Tensor Core架构是一种专为加速人工智能、深度学习、高性能计算(HPC)等领域中的矩阵运算和张量运算而设计的硬件单元。自首次在Volta架构中引入以来&#xff0c;Tensor Cores已成为NVIDIA高端GPU的核心特性&#xff0c;并在后续的Turing…

Linux基础5-进程控制1(fork创建子进程,写时拷贝,进程退出)

上篇文章&#xff1a;Linux基础4-进程5&#xff08;程序地址空间详解&#xff09;-CSDN博客 本篇重点&#xff1a;fork&#xff0c;写实拷贝&#xff0c;进程退出 目录 一. fork创建子进程 1.1 fork用法 1.2 fork返回值有两个的理解 二. 进程退出码 2.1 进程退出码 2.2 进…

用python中的tkinter包实现进度条

python中的tkinter包是一种常见的设计程序的GUI界面用的包。本文主要介绍这里面的一个组件&#xff1a;进度条&#xff08;Progressbar&#xff09;。Tkinter Progressbar里面对进度条组件已经做了一定的介绍&#xff0c;但比较抽象。本文以另一种方式介绍这个组件及其常用用法…

20.使用标准差剔除异常值

标准差剔除异常值 1. 方法2. 示例代码2.1 数据读取与清洗2.2 分段读取数据并绘图2.3 解释2.4 outliers2.5 结果展示 我有个记录数据采集后格式是step_rewards.txt 的文档&#xff0c;里面只有一列数据&#xff0c;10*10000行数据&#xff0c;没有表头&#xff0c;分别代表奖励数…

中科蓝讯修改蓝牙名字:【图文讲解】

本文以市面上一款公板公模的畅销产品为例。K12蓝牙音响。 音响用的芯片是&#xff1a;AB5768E MIC用的芯片是&#xff1a;AB5769A 硬件框架图如下&#xff1a; 芯片修改名字&#xff0c;通过下载工具中的配置进行修改。选择蓝牙配置&#xff0c;然后会出现蓝牙名字&#xff…

旅行包发霉怎么处理 除霉及防霉解决方法

近些年听到很多箱包工厂的心声&#xff0c;为什么箱包旅行包每年都会出现长霉请况呢&#xff1f;长霉了&#xff0c;也就是长毛了&#xff0c;长出那些病菌、真菌、细菌等微生物。经ihaoer防霉人士介绍旅行包长霉处理方法如下&#xff1a; 旅行包长霉的因素 一、旅行包储存在阴…

14、交互补充

1、元素的三大系列 1.1、offset系列 1.1.1、offset初相识 使用offset系列相关属性可以动态的得到该元素的位置&#xff08;偏移&#xff09;、大小等 获得元素距离带有定位祖先元素的位置获得元素自身的大小&#xff08;宽度高度&#xff09;注意&#xff1a;返回的数值都不…

【IEEE出版、八大高校联合举办、稳定EI检索】第四届人工智能与智能制造国际研讨会(AIIM 2024,12月20-22日)

第四届人工智能与智能制造国际研讨会&#xff08;AIIM 2024&#xff09; The 4th International Symposium on Artificial Intelligence and Intelligent Manufacturing 2024年12月20-22日 中国成都 重要信息 大会官网&#xff1a;www.isaiim.com 大会时间&#xff1a;202…