【D3.js in Action 3 精译_018】2.4 向选择集添加元素

当前内容所在位置

  • 第一部分 D3.js 基础知识
    • 第一章 D3.js 简介(已完结)
      • 1.1 何为 D3.js?
      • 1.2 D3 生态系统——入门须知
      • 1.3 数据可视化最佳实践(上)
      • 1.3 数据可视化最佳实践(下)
      • 1.4 本章小结
    • 第二章 DOM 的操作方法
      • 2.1 第一个 D3 可视化图表
      • 2.2 环境准备
      • 2.3 用 D3 选中页面元素
      • 2.4 向选择集添加元素 ✔️
      • 2.5 用 D3 设置与修改元素属性
      • 2.6 用 D3 设置与修改元素样式

2.4 向选择集添加元素

选择集虽好,但如果不对其进行任何操作的话也没太多用处。D3 选择集的一个经典用法是先获取一个选择集,进而将另一个元素追加(append)到该选择集内。尽管 JavaScript 已经提供了追加元素的原生接口,但 D3 让这个操作更加简单流畅。

通过 D3 向选择集添加元素的主要方法是 selection.append()append() 方法以新增元素的类型(type)或标签名为参数,并将新元素添加为选择集的最后一个子元素(如图 2.9 所示):

图 2.9 append() 方法
图 2.9 append() 方法

回到之前的虚构 DOM 树示例。如果要给 SVG 容器追加一个矩形元素,则可以先获取 SVG 容器的选择集,然后在该选择集上链式调用 append() 方法,并将目标节点类型(type,即 rect 元素)作为参数传入 append() 方法(如图 2.10 所示)。

d3.select("svg").append("rect");

图 2.10 用 selection.append() 方法将元素添加为选择集的最后一个子元素
图 2.10 用 selection.append() 方法将元素添加为选择集的最后一个子元素

也可以使用 d3.selectAll("div") 来获取包含 DOM 中每个 div 节点的选择集,并将段落元素分别添加到每个节点中,如图 2.11 所示:

d3.selectAll("div").append("p");

图 2.11 与 d3.selectAll() 连用后,append 方法将节点添加到选择集的每个元素中
图 2.11 与 d3.selectAll() 连用后,append 方法将节点添加到选择集的每个元素中

接下来趁热打铁,一起来构建本章前面提到的那个条形图。

首先确认一下,在代码编辑器中打开的仍然是本章源码文件中的 start 文件夹,并且本地 Web 服务器正在运行(关于借助 VS Code 的 Live Server 扩展程序启动 Web 服务器的具体方法,请参考 附录 A)。然后打开 index.html 文件。注意,该文件包含一个类名为 responsive-svg-containerdiv 元素。

正如第一章所述,大多数 D3 可视化项目都是用 SVG 元素构建的,这里的条形图也不例外。为此,需要一个 SVG 容器,并将 SVG 图形放入其中。我们先来添加 SVG 元素。

打开 /js/main.js 文件。使用 d3.select() 方法选中具有 responsive-svg-container 类的 div,并在该 div 中添加一个 SVG 元素,如以下代码所示:

d3.select(".responsive-svg-container").append("svg");

保存 main.js 文件,并在浏览器中查看效果。此时视口中看不到任何变化,但如果打开浏览器检查工具(如图 2.12 所示),则会看到 SVG 元素已经被精确添加到 DOM 树中,正如我们所希望的那样!

图 2.12 向 DOM 树添加 SVG 元素节点效果图
图 2.12 向 DOM 树添加 SVG 元素节点效果图

下一小节,我们将通过设置 viewBox 属性来得到一个响应式的 SVG 容器。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyTorch】图像二分类项目-部署

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 在独立于训练脚本的新脚本中部署用于推理的模型,需要构造一个模型类的对象,并将权重加载到模型中。操作流程为:定义模型--加载权重--在验证和测试数据集上部署模型。 import torch…

基于PSO算法优化PID参数的一些问题

目录 前言 Q1:惯性权重ω如何设置比较好?学习因子C1和C2如何设置? Q2:迭代速度边界设定一定能够遍历(/覆盖)整个PID参数二维空间范围吗?还是说需要与迭代次数相关?迭代次数越高&a…

MATLAB图像处理分析基础(一)

一、引言 MATLAB软件得到许多数字图像处理学生、老师和科研工作者的喜爱,成为数字图像处理领域不可或缺的工具之一,其与其他软件相比有以下诸多显著优点。首先,MATLAB 拥有强大的内置函数库,涵盖了图像读取、显示、处理及分析的全…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(九)-无人机区域地面探测与避让(DAA)

引言 3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及A2X(Aircraft-to-Everything)服务的支持。 3GPP TS 23.256 技术规范: 【免费】3GPPTS23.256技术报告-无人机系…

星火模型大体验简单实现一个LLM Chat平台

星火文档 利用axios封装 星火模型 API 请求 为了管理好的key,需要把对应的环境放置env.json文件中。 源码 const axios = require(axios); const ENV = require(../env.json); /*** * @param {*} messages 数组* @returns */ function request(messages) {return new Pro…

Unity UI 开发:代码与示例全解析

在 Unity 游戏开发中,用户界面(UI)的设计和实现是至关重要的一部分。一个直观、美观且功能完善的 UI 能够极大地提升玩家的游戏体验。本文将为您介绍一些 Unity UI 相关的代码和示例,帮助您更好地掌握 UI 开发。 一、创建基本 UI…

《昇思 25 天学习打卡营第 14 天 | 基于MindSpore的红酒分类实验 》

《昇思 25 天学习打卡营第 14 天 | 基于MindSpore的红酒分类实验 》 活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 签名:Sam9029 使用MindSpore实现K近邻(KNN)红酒聚类 实验目的和KNN算法概述 本次实验的…

gfsk调制相对于FSK调制优点

GFSK调制相对于FSK调制主要有以下优点: 抗噪声性能:GFSK调制采用高斯滤波器,这使得其抗噪声性能较好。在同样的信噪比下,GFSK调制能够实现更高的误码率性能。 频带利用率:GFSK调制的频带利用率相对较高。由于其带外衰…

ESP8266模块(2)

实例1 查看附近的WiFi 步骤1:进入AT指令模式 使用USB转串口适配器将ESP8266模块连接到电脑。打开串口终端软件,并设置正确的串口和波特率(通常为115200)。输入以下命令并按回车确认: AT如果模块响应OK,…

微信小程序:自定义 tabBar 效果

自定义 tabBar 效果 自定义 tabBar 在 app.json 中的 tabBar 里设置 custom 为 true 就可以关闭原生 tabBar。 开启自定义 tabBar 原生的 tabBar 内容不删除,兼容低版本。 {// 注册vant组件"usingComponents": {"van-tabbar": "vant/weapp…

【计算机网络】0 课程主要内容(自顶向下方法,中科大郑烇、杨坚)(待)

1 教学目标 掌握计算机网络 基本概念 工作原理 常用技术 为将来学习、应用和研究计算机网络打下坚实基础 2 课程主要内容 1 计算机网络和互联网2 应用层3 传输层4 网络层:数据平面5 网络层:控制平面6 数据链路层和局域网7 网络安全8 无线和移动网络9 多…

构建gitlab远端服务器(check->build->test->deploy)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言构建gitlab远端服务器一、步骤一:搭建gitlab的运行服务器【运维】1. 第一步:硬件服务器准备工作(1)选择合适的硬件和操作系统linux(2)安装必…

Learning vtkjs之WarpScalar

过滤器 WarpScalar 介绍 先看一个官方的一句话介绍: vtkWarpScalar - deform geometry with scalar data vtkWarpScalar - 使用标量数据变形几何体 详细介绍 vtkWarpScalar is a filter that modifies point coordinates by moving points along point normals by…

Linux服务器安装nginx,nginx配置详解。

前置 一台linux服务器。nginx安装包(地址:NginxDownload)ssh连接工具:putty,Tssh等推荐使用tssh或者服务器云平台自带的 部署 通过ssh工具连接到服务器,su进入root账户,先更新三方库。 更新三方库 Cen…

spss数据分析是什么 怎么下载spss

什么是SPSS SPSS是社会统计科学软件包的简称, 其官方全称为IBM SPSS Statistics。SPSS软件包最初由SPSS Inc.于1968年推出,于2009年被IBM收购,主要运用于各领域数据的管理和统计分析。作为世界社会科学数据分析的标准,SPSS操作操作…

【Rust光年纪】超越ORM:探索Rust语言多款数据库客户端库的核心功能和使用场景

数据库操作新选择:从异步操作到连接管理,掌握Rust语言数据库客户端库的全貌 前言 在现代软件开发中,与数据库进行交互是一个常见的任务。Rust语言作为一种高性能、内存安全的编程语言,拥有丰富的生态系统来支持各种数据库操作。…

C++合作开发项目:美术馆1.0

快乐星空MakerZINCFFO 合作入口&#xff1a;CM工作室 效果图&#xff1a; 代码&#xff1a; &#xff08;还有几个音乐&#xff01;&#xff09; main.cpp #include <bits/stdc.h> #include <windows.h> #include <conio.h> #include <time.h> #in…

Codeforces 1733D 891C Envy+1681F Unique Occurrences(可撤销并查集)

891C Envy 题意 给定一张图以及q个查询&#xff0c;输出每个查询中的边是否全部会出现在某个最小生成树里。 思路 首先如果只考虑一次查询&#xff0c;这一次查询只有一条边&#xff0c;那么只要用kruskal算法处理完所有边权小于这条边的边&#xff0c;此时如果这条边的两点已…

Math Reference Notes: 数学思想和方法

文章目录 1. 数学思想1.1 数形结合思想1.2 转化思想1.3 分类讨论思想1.4 整体思想 2. 数学方法2.1 配方法2.2 因式分解法2.3 待定系数法2.4 换元法2.5 构造法2.6 等积法2.7 反证法2.8 判别式法 1. 数学思想 1.1 数形结合思想 定义&#xff1a;将数与形&#xff08;代数与几何…

linux 安装使用php环境, 以及常用操作介绍

php的源码编译安装,属实是太麻烦太痛苦了&#xff1b;于是我们选择放弃这种方式&#xff0c;采用linux自带的包管理器来安装。 本文使用的linux发行版本是centOs, 安装php环境的指令如下 yum install php php-fpm 如果你的YUM仓库中没有你需要的版本&#xff0c;你可能需要添…