《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
AI 代码解读

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>
AI 代码解读

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

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

目录
打赏
0
0
0
0
1819
分享
相关文章
数据可视化技术的较量:D3.js与Tableau的比较与选择
在当今信息爆炸的时代,数据可视化成为了帮助我们理解和传达数据的重要工具。本文将重点对比并评估两个主流的数据可视化技术和工具,即D3.js和Tableau。我们将探讨它们的优势、适用场景以及选择的关键因素,以帮助读者在选择合适的数据可视化工具时做出明智的决策。
利用Python实现简单的数据可视化
数据可视化是将数据以图形或图像的方式呈现,帮助人们更直观地理解数据背后的信息。本文介绍如何利用Python中的常用库matplotlib和seaborn来实现简单的数据可视化,包括绘制折线图、散点图、柱状图和箱线图等,旨在帮助读者快速上手数据可视化技术。
使用D3.js进行数据可视化的探索与实践
【6月更文挑战第2天】本文探讨了D3.js在数据可视化中的应用,介绍了D3.js作为JavaScript库的特性,包括数据驱动、灵活性和兼容性。实践中,涉及数据准备、创建SVG容器、数据绑定与绘制、交互与动画以及样式美化。D3.js使开发人员能高效创建动态、交互式图表,适用于多平台和设备。未来,随着数据可视化技术进步,D3.js的应用前景广阔。
数据可视化进阶:D3.js在复杂数据可视化中的应用
【10月更文挑战第26天】数据可视化是将数据以图形、图表等形式呈现的过程,帮助我们理解数据和揭示趋势。D3.js(Data-Driven Documents)是一个基于JavaScript的库,使用HTML、SVG和CSS创建动态、交互式的数据可视化。它通过数据驱动文档的方式,将数据与DOM元素关联,提供高度的灵活性和定制性,适用于复杂数据的可视化任务。 示例代码展示了如何使用D3.js创建一个简单的柱状图,展示了其基本用法。D3.js的链式调用和回调函数机制使代码简洁易懂,支持复杂的布局和交互逻辑。
206 3
D3.js实战:数据可视化高级技巧实例应用
本文介绍了D3.js入门,包括创建HTML文件引入库、绘制简单线图、柱状图和饼图。示例展示了数据绑定、交互性和动画效果,如柱状图的悬停效果和线图的数据平滑过渡。此外,还提及力导向图和地图可视化的实现,以及使用Enter, Update, Exit模式进行动态更新。最后提到了复杂图表和高级技巧,如使用组件库、动画、交互性和性能优化。
264 0
深入浅出:使用Python实现数据可视化
在海量数据的时代,如何有效地理解和呈现数据成为了一个挑战。本文将介绍如何使用Python中的Matplotlib和Seaborn库来实现数据的可视化,使复杂的数据集通过图形的方式变得易于理解。我们将从基础知识开始,逐步深入到创建多种类型的图表,包括条形图、折线图、散点图等,并探讨如何对图表进行美化和高级定制,以满足不同场景的需求。此外,本文还将简要介绍如何使用Pandas进行数据处理,为数据可视化做准备。无论你是数据分析师、科研人员还是普通爱好者,本文都能帮助你更好地利用Python实现数据的可视化展示。
213 27
数据可视化技术与工具:D3.js 和 Tableau 的比较和选择
数据可视化是当今分析和决策制定的关键步骤。D3.js 和 Tableau 是两个广泛使用的可视化工具。本文将探讨它们的优缺点,以及在选择何种工具时应该考虑的因素。
探秘D3.js:数据可视化交互式图表与效果
数据可视化已经成为如今大数据时代的重要工具之一。它不仅可以更直观地呈现数据,还可以帮助人们更好地理解数据背后的含义。而D3.js则作为目前最流行的数据可视化库之一,其强大的功能和灵活性广受开发者青睐。本文将介绍如何使用D3.js创建交互式图表和可视化效果,以及如何利用其强大的API来进行个性化定制。
556 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等