《D3.js数据可视化实战手册》——2.7 处理原始选集

简介:

本节书摘来异步社区《D3.js数据可视化实战手册》一书中的第2章,第2.7节,作者: 【加拿大】Nick Qi Zhu,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.7 处理原始选集

虽然不常使用,但某些时候,获取D3的原始选集数组对于开发是有利的,因为无论是为了调试,还是和其他JavaScript库集成,都可能需要原始的DOM元素。在本例中,我们将会对此进行展示。同时,我们也会观察D3选集对象的内部结构。

2.7.1 准备阶段

请在浏览器中打开如下文件的本地副本。

https://github.com/NickQiZhu/d3-cookbook/blob/master/src/chapter2/raw-selection.html

2.7.2 开始编程

当然,可以使用nth-child选择器,或者在each函数基础上使用选集迭代函数,但是有些情况下,这些方式过于累赘。这里我们提供一种更加便利的处理原始选集数组的方法。在本例中,可以看到对原始选集数组进行存取和处理的方法。

<table class="table">
    <thead>
    <tr>
        <th>Time</th>
        <th>Type</th>
        <th>Amount</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>10:22</td>
        <td>Purchase</td>
        <td>$10.00</td>
    </tr>
    <tr>
        <td>12:12</td>
        <td>Purchase</td>
        <td>$12.50</td>
    </tr>
    <tr>
        <td>14:11</td>
        <td>Expense</td>
        <td>$9.70</td>
    </tr>
    </tbody>
</table>
<script type="text/javascript">
    var rows = d3.selectAll("tr");// <-- A
    var headerElement = rows[0][0];// <-- B
    d3.select(headerElement).attr("class", "table-header");// <--C
    d3.select(rows[0][1]).attr("class", "table-row-odd"); //<-- D
    d3.select(rows[0][2]).attr("class", "table-row-even"); //<-- E
    d3.select(rows[0][3]).attr("class", "table-row-odd"); //<-- F
</script>

本例生成的视觉效果如图所示。

743b25da6078f89c2fe7c1f8e3e599ce4753e25b

2.7.3 工作原理

在本例中,我们遍历了一个页面上的HTML表格,并为之上色。事实上,这并非在D3下为表格的奇偶行上色的最好示例,但在这里,我们主要意在展示如何获取原始选集数组。

技巧.tif 一个更好的为表格奇偶行上色的方式是使用each函数,再根据不同的索引参数来处理。

在行A中,我们选取了所有的行并将选集结果存储在rows变量中。D3选集结果存在于一个JavaScript二维数组中。因此,可以使用rows0和rows0来分别获得第一和第二个选中元素。在行B中,表格的header元素可以通过rows0来获取,得到一个DOM元素对象。在前面章节中我们提到过,任何DOM元素都可以直接通过d3.select来选取,如行C所示。在行D、E、F中,我们展示了如何对选集中的每个元素进行直接索引和访问。

在某些情况下,很容易就能获得原始选集。但是,由于它需要直接访问D3选集中的数组数据,这就会使得代码对此产生结构性的依赖。换句话说,如果在未来的D3版本中,它改变了这一结构,那么依赖它的代码就会受到影响。因此,除非不得已,我们应该尽量避免操作原始选集。

技巧.tif 这种方式通常并不必要,但是如果在特定情况下,例如在单元测试时,我们能够方便地知道每个元素的索引值和其引用,那么这一方式是非常有效的。我们在后面的章节将详细讲解单元测试。

相关文章
|
10月前
|
资源调度 自然语言处理 数据可视化
【数据分析与可视化】Matplotlib中十大绘图模型的讲解及实现(图文解释 附源码)
【数据分析与可视化】Matplotlib中十大绘图模型的讲解及实现(图文解释 附源码)
137 1
|
9月前
|
数据可视化 JavaScript API
使用D3.js进行数据可视化的探索与实践
【6月更文挑战第2天】本文探讨了D3.js在数据可视化中的应用,介绍了D3.js作为JavaScript库的特性,包括数据驱动、灵活性和兼容性。实践中,涉及数据准备、创建SVG容器、数据绑定与绘制、交互与动画以及样式美化。D3.js使开发人员能高效创建动态、交互式图表,适用于多平台和设备。未来,随着数据可视化技术进步,D3.js的应用前景广阔。
|
4月前
|
数据可视化 JavaScript 前端开发
数据可视化进阶:D3.js在复杂数据可视化中的应用
【10月更文挑战第26天】数据可视化是将数据以图形、图表等形式呈现的过程,帮助我们理解数据和揭示趋势。D3.js(Data-Driven Documents)是一个基于JavaScript的库,使用HTML、SVG和CSS创建动态、交互式的数据可视化。它通过数据驱动文档的方式,将数据与DOM元素关联,提供高度的灵活性和定制性,适用于复杂数据的可视化任务。 示例代码展示了如何使用D3.js创建一个简单的柱状图,展示了其基本用法。D3.js的链式调用和回调函数机制使代码简洁易懂,支持复杂的布局和交互逻辑。
182 3
|
10月前
|
数据可视化 JavaScript 前端开发
【专栏】D3.js 和 Tableau 是两种流行的数据可视化工具
【4月更文挑战第27天】D3.js 和 Tableau 是两种流行的数据可视化工具。D3.js,一个JavaScript库,以其灵活性和定制性著称,适合创建复杂、个性化的可视化效果,但需要编程技能。Tableau,一款用户友好的分析软件,提供直观界面和强大分析功能,适合快速生成常见图表。在选择时,应考虑项目需求、团队技术能力、数据规模和性能要求。两者可单独使用,也可结合发挥各自优点。随着数据可视化需求的增长,这些工具将持续发展并提供更好的解决方案。
238 1
|
10月前
|
数据可视化 JavaScript 架构师
D3.js实战:数据可视化高级技巧实例应用
本文介绍了D3.js入门,包括创建HTML文件引入库、绘制简单线图、柱状图和饼图。示例展示了数据绑定、交互性和动画效果,如柱状图的悬停效果和线图的数据平滑过渡。此外,还提及力导向图和地图可视化的实现,以及使用Enter, Update, Exit模式进行动态更新。最后提到了复杂图表和高级技巧,如使用组件库、动画、交互性和性能优化。
235 0
|
10月前
|
数据可视化
R语言ggplot2 对Facebook用户数据可视化分析
R语言ggplot2 对Facebook用户数据可视化分析
|
10月前
|
数据可视化 JavaScript 前端开发
数据可视化技术与工具:D3.js 和 Tableau 的比较和选择
数据可视化是当今分析和决策制定的关键步骤。D3.js 和 Tableau 是两个广泛使用的可视化工具。本文将探讨它们的优缺点,以及在选择何种工具时应该考虑的因素。
|
10月前
|
数据可视化 前端开发 JavaScript
探秘D3.js:数据可视化交互式图表与效果
数据可视化已经成为如今大数据时代的重要工具之一。它不仅可以更直观地呈现数据,还可以帮助人们更好地理解数据背后的含义。而D3.js则作为目前最流行的数据可视化库之一,其强大的功能和灵活性广受开发者青睐。本文将介绍如何使用D3.js创建交互式图表和可视化效果,以及如何利用其强大的API来进行个性化定制。
528 0
|
10月前
|
数据可视化 数据挖掘 Linux
【数据分析与可视化】Seaborn中常用绘图模型讲解及实战(图文解释 附源码)
【数据分析与可视化】Seaborn中常用绘图模型讲解及实战(图文解释 附源码)
177 0
|
10月前
|
存储 数据可视化 数据挖掘
【数据分析与可视化】时间序列基础讲解与实战(图文解释 附源码)
【数据分析与可视化】时间序列基础讲解与实战(图文解释 附源码)
99 0