【D3.js in Action 3 精译_015】1.3 D3 视角下的数据可视化最佳实践(下)

当前内容所在位置

  • 第一部分 D3.js 基础知识
    • 第一章 D3.js 简介 ✔️
      • 1.1 何为 D3.js?
      • 1.2 D3 生态系统——入门须知
        • 1.2.1 HTML 与 DOM
        • 1.2.2 SVG - 可缩放矢量图形
        • 1.2.3 Canvas 与 WebGL
        • 1.2.4 CSS
        • 1.2.5 JavaScript
        • 1.2.6 Node 与 JavaScript 框架
        • 1.2.7 Observable 记事本
      • 1.3 数据可视化最佳实践(上)
      • 1.3 数据可视化最佳实践(下) ✔️
      • 1.4 本章小结 ✔️
    • 第二章 DOM 的操作方法(精译中 ⏳)

(上接第 1.3 小节正文部分:……从下一章开始,我们将着手创建 D3 可视化项目。)

与 Hesham Eissa、Lindsey Poulter 的访谈记录

EissaPoulter 都是数据可视化领域的设计师兼开发者。

【主持人】你们在一篇博文中写道,在开展 Ben & Jerry’s 项目之前,你们都有在 Tableau 中设计数据可视化的经验。是什么让你们想学习 D3 而不是其他数据可视化工具?(详见 https://heshameissa.com/blog/learn-d3/)

【嘉宾】 我们都很喜欢从很多优秀的可视化作品中汲取灵感,像 The Pudding 官网、Nadieh Bremer(荷兰著名数据可视化设计师)、Information is Beautiful Awards(权威数据可视化设计奖项,2012 年由英国设计师 David McCandless 创立,每年评选和表彰在数据可视化领域取得杰出成就的作品和设计师)以及各种新闻媒体制作的数据新闻作品。我们也注意到在所有这些备受瞩目的作品背后,D3 是它们共有的技术基础。

【嘉宾】 此外,我们俩都热衷于寻找创造性的方式来展示数据,不想被特定软件所提供的可视化功能束缚住手脚。利用 D3 和基于 Web 的可视化设计方案,我们觉得可以创作出任何我们想要的作品来,唯一能限制自己的恐怕就是自己的能力水平了。

【主持人】还是这篇博文,我很喜欢你们安排整个学习过程的这部分内容,因为你们之前没有前端开发的经验,并且能够静下心来一步一步地去做。在这个学习过程中,你们觉得最难的是什么?最享受的又是什么呢?

【嘉宾】 学习的过程中最困难的地方是有太多不同的知识点需要学习和理解;不仅如此,前端开发领域一直在飞速发展,我们还必须紧跟步伐,不断适应不同版本的示例,有时甚至会猛地跳到下一个主题——这也是一种困难,因为当时缺乏充分消化吸收每个知识点的耐心。

【嘉宾】 最令人愉快的,当属我们终于可以学以致用、将所学知识直接应用于数据可视化的那一刻。看到页面最终渲染出了第一个 SVG 图形,那一刻我们欣喜异常。在深入研究不同 D3 模块的过程中,我们乐此不疲地探索着每个模块提供的强大功能,以期在未来大放异彩。像 d3-force 这样极具灵活性和适用性的 D3 模块,真正拓展了我们对数据可视化的思考方式。

【主持人】遇到问题你们都会去哪儿寻求帮助呢?

【嘉宾】 与他人并肩学习的最大好处就在于有一个可以提问的固定搭档。如果我们不理解某个概念,就会互相询问。这样做要么再次印证我们都有困惑,需要花更多时间去研究;要么让一个人有机会以完全不同的方式进行阐释。

【嘉宾】 除了相互交流之外,我们还花了不少精力去了解该领域其他人的代码,看看他们是如何落地某个特定概念的。数据可视化社区最棒的一点就是乐于分享。迈克·博斯托克(Mike Bostock)在 Observable 以及更大的 Observable 社区上提供的 D3 示例往往是我们的救命稻草。通常,我们在创建一个新图表时,首先要看的就是他的示例——99% 的情况下,他都能提供我们需要的内容。The Pudding 网站和 Nadieh Bremer 在各自的 GitHub 账号上都有大量的源码可供参考,所以我们经常会问:“他们是如何实现这样的过渡效果的?”然后找到真正能用的示例。有趣的是,有个周末我们甚至还买了这本《D3.js 实战》的第一版,仅仅是因为当时对某个概念感到困惑,而网上又找不到任何答案。

【嘉宾】 不过也必须承认,有几次我们真的陷入了困境。一方面是我们的词汇量还不够丰富,无法清楚准确地描述需求进而上网搜到相关内容;另一方面则是因为我们总想找到一个很具体的解决方案。我们并不害怕连续花上几天甚至几周的时间去尝试各种方法、做各种实验。但由于没能找到全面了解 Web 数据可视化知识体系的捷径,我们最终不得不潜心积累、认真领悟,而不是简单地复制粘贴。

【主持人】相比与其他数据可视化工具,你们对于 D3.js 有什么特别喜欢、或特别不喜欢的地方吗?

【嘉宾】 D3 需要更多时间来学习如何使用。其他工具可能仅需单击几次鼠标就能创建一个柱状图,而 D3 可能需要 50 多行代码才能实现。不过,这也正是我们最喜欢 D3 的地方——你可以 掌控一切

项目精选《本杰瑞冰淇淋的内幕》(详见 https://benjerry.heshlindsdataviz.com/)

可视化作品《本杰瑞冰淇淋的 98 种口味》可视化作品《本杰瑞冰淇淋的 98 种口味》

【主持人】你们共同参与了《Ben & Jerry’s》系列作品的创作,具体分工是怎样的?是一个人专注于设计、另一个人专注于开发,还是两个人共同从事这两方面的工作?

【嘉宾】 我们采取的估计是一种非传统的合作模式。鉴于当时正处于全球大流行病的封锁期高峰,我们反倒有很多时间可供消磨。我们的做法不是分工合作,而是从头到尾学习和关注整个过程。我们会一起制作故事情节图(storyboard)、一起探索数据,然后设定一个目标。我们会说:"让我们构建一个和弦图,来展示冰淇淋的新品组合。一旦我们都完成了各自的工作,就会比较各自的代码,看看谁的方法更好,然后合并到一起,再开始下一个任务。一旦我们开始对自己的能力有信心,大概完成一半的时候就会开始分工合作。我们并没有将工作严格地划分为某人固定负责某项任务,只是根据需要互相配合,共同完成所有必要的工作。

【主持人】这个项目同时用到了 SVG 元素和 Canvas 画布。一些作品是基于 SVG 的,比如《本杰瑞冰淇淋完整口味指南》;而另一些主要基于 Canvas,比如像《本杰瑞冰淇淋的 98 种口味》。甚至在和弦图作品《本杰瑞 79 种加料》中结合了二者来进行创作。你们在 SVG 和 Canvas 的取舍上是如何考量的呢?是从一开始就考虑到这样的结构,还是说在实施的过程中出于性能考虑选择了 Canvas 画布呢?

【嘉宾】 我们从一开始就没有考虑过这样的结构。老实讲,起初我们可能连 Canvas 是什么都不清楚。在确定了要创作的可视化内容后,我们才开始着手添加过渡效果,但很快就发现效果非常糟糕。这促使我们开始研究不同的性能参数,并最终选定了 Canvas。

和弦图可视化作品《本杰瑞冰淇淋的 79 种加料》 和弦图可视化作品《本杰瑞冰淇淋的 79 种加料》

【主持人】二位已经成功地让整个项目在移动端运行良好,包括丰富的径向可视化效果。这期间是否不得不做出必要的妥协,比如调整原始想法以适应较小的触摸屏之类?在基于 Web 的可视化方面,你们更倾向于移动端优先还是桌面端优先呢?

【嘉宾】 到了后期分而治之阶段,我们最后要考虑的问题之一就是移动端。根据以往的经验,把它留到最后并不是最佳方案,因为有时候不得不做一些让步。我们不仅要搞清楚需要改变什么,还要弄清楚怎样去改变。借助滚动场景叙事(即 scrollytelling,详见 http://mng.bz/g7MV)我们成功解决了移动端的问题:一方面可以让文字在可视化效果上方滚动;另一方面也可以通过突出重要数据的方式来取代之前的交互逻辑。

【嘉宾】 桌面优先的策略固然为可视化提供了更多的施展空间,可以进行更复杂的交互和设计;但移动端会驱使你提炼出每个可视化效果的核心目的,这种做法在试图让整体表达更清楚明了时可能会有帮助。

【主持人】创作这个作品大概花了多长时间?当中有没有哪个环节是相对于其他步骤而言耗费的时间更久、或者难度更大的?

【嘉宾】 由于这是我们第一个真正意义上的 D3 可视化项目,需要不断学习来确保一切尽善尽美,每个部分都要重做很多次,因此在每天投入工作的基础上我们大概花了四个月的时间来完成整个创作过程。最终不得不给我们自己设定一个最后期限,因为我们知道如果不这样做,我们会继续重做、完善并发现问题。

【嘉宾】 至于项目中难度更大、耗时更久的部分,那一定是与前端开发关联更多的内容,涉及可视化方面的反而不多。我们已经完全按照自己的想法设计了所有的可视化内容和叙事场景,但后来才发现,想让这些内容在所有设备和浏览器上都能正常运行并且表现良好,还需要花费更多的时间和精力才能办到。

可视化作品《本杰瑞冰淇淋口味大全》可视化作品《本杰瑞冰淇淋口味大全》

【主持人】有没有规划过在不久的将来对 D3 的某个具体功能或模块进行探索,或者再深挖一下?

【嘉宾】 当然,有一些知识我们还处于“复制粘贴”的初期阶段,没能完全理解其工作原理,这其中就包括和弦图、桑基图和地理模块等等。此外,掌握更多的数学函数往往可以进一步帮助我们充分利用 D3 提供的强大功能。


1.4 本章小结

  • 当您想在数据可视化方面拥有完全的创意自由与技术自由时,D3 就是您的首选工具。

  • D3 应用程序的样式和服务类似于传统网络内容。

  • 我们从不单独使用 D3,而是将其作为技术和工具生态系统的一部分,并将其结合起来创建丰富的 Web 界面,包括:HTML、CSS、JavaScript、SVG、Canvas 以及 React 或 Svelte 等框架。

  • 在构建数据可视化时,最常使用的 SVG 图形有:直线(lines)、矩形(rectangles)、圆(circles)、椭圆(ellipses)、路径(paths)及文本(text)。

  • 使用 D3 需要对这些几何基元及其主要属性有基本的了解。

  • 在使用 D3 之前,应该熟悉 JavaScript 的两个核心知识——方法的链式调用和对象的操作:

    • 方法的链式调用,是在同一对象上相继调用多个方法的一种编程模式(pattern)。
    • 在 D3 中,数据集通常是以对象数组的形式出现的。JavaScript 提供了多种方法来访问和操作其中的数据。
  • 作为 D3 开发人员,扎实了解数据可视化的最佳实践至关重要。本章提到的多种资源都可以助您开启学习之旅。

(第一章完)

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

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

相关文章

百川智能,摘下“大模型皇冠上的明珠”?

随着AI产业化和产业AI化成为业界共识,大模型的“新赛季”来了。 2024年是国产大模型全面商业化的元年,各地人工智能产业发展的政策密集出台。同时,在2024世界人工智能大会(WAIC 2024)上,各大AI厂商纷纷表示…

【Linux】基础I/O——FILE,用户缓冲区

1.FILE里的fd FILE是C语言定义的文件结构体,里面包含了各种文件信息。可以肯定的一点是,FILE结构体内一定封装了 fd 。为什么?来看接下来的思路分析: 1.使用系统接口的必然性   文件存储在磁盘上,属于外设。谁有权限访问…

【AI绘画教程】Stable Diffusion 1.5 vs 2

在本文中,我们将总结稳定扩散 1 与稳定扩散 2 辩论中的所有要点。我们将在第一部分中查看这些差异存在的实际原因,但如果您想直接了解实际差异,您可以跳下否定提示部分。让我们开始吧! Stable Diffusion 2.1 发布与1.5相比,2.1旨在解决2.0的许多相对缺点。本文的内容与理解…

<Rust><GUI>rust语言GUI库tauri体验:前、后端结合创建一个窗口并修改其样式

前言 本文是rust语言下的GUI库:tauri来创建一个窗口的简单演示,主要说明一下,使用tauri这个库如何创建GUI以及如何添加部件、如何编写逻辑、如何修改风格等,所以,这也是一个专栏,将包括tauri库的多个方面。…

filebeat生产环境配置

配置文件属性 生产配置 filebeat.inputs: - type: logenabled: truepaths: - /tmp/logs/*.log- /var/log/system.log- /var/log/wifi.logsymlinks: truejson.keys_under_root: truejson.message_key: xxxjson.add_error_key: true# 如果想卡部分日志,比如用时间作…

开源大语言模型完整列表概览

Large Language Model (LLM) 即大规模语言模型,是一种基于深度学习的自然语言处理模型,它能够学习到自然语言的语法和语义,从而可以生成人类可读的文本。 所谓"语言模型",就是只用来处理语言文字(或者符号体…

R语言优雅的把数据基线表(表一)导出到word

基线表(Baseline Table)是医学研究中常用的一种数据表格,用于在研究开始时呈现参与者的初始特征和状态。这些特征通常包括人口统计学数据、健康状况和疾病史、临床指标、实验室检测、生活方式、社会经济等。 本人在既往文章《scitb包1.6版本发…

不想填邀请码?Xinstall来帮你,一键安装无忧愁

在这个快节奏的时代,每一个点击都承载着用户的期待与耐心。然而,在下载App的过程中,繁琐的邀请码填写往往成为了用户体验的一大障碍。你是否也曾经因为不愿填写邀请码而放弃了一款心仪的App?今天,就让我们一起走进Xins…

【Unity美术】如何通用3Dmaxs做一个宝箱

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 专栏交流🧧&…

VsCode远程ssh连接失败:Could not establish connection to XXX

一、问题描述 在VsCode中按下"F1",选择Remote-SSH:Connect to Host 选择一个已经配置好的SSH主机,比如我选择的是192.168.0.104: 结果提示:Could not establish connection to XXX 二、解决方法 观察VsCode的输出信息…

关于山东省首版次中检测报告的要求是什么

关于山东省首版次高端软件申报中的检测报告要求,虽然搜索结果中没有直接提供详细的具体要求,但可以结合一般软件检测报告的标准和要求,以及首版次软件申报的一般流程,推测可能涉及以下几个方面: 1. **检测机构资质**&…

有关电力电子技术的一些相关仿真和分析:⑦三相桥式电压型PWM逆变器与直接/间接法控制单相全桥结构PWM整流器(MATLAB/Siumlink仿真)

1.1 题目一要求 以三相桥式电压型PWM逆变器为对象,研究其在不同调制度下,输出电压的频谱成分变化,依据仿真波形分析其工作时序。 参数要求:三相桥式逆变电路,直流侧电压800V,调制波频率50HZ,开关频率10kHZ,阻感负载R=10Ω,L=5mH。 1.2 题目二要求 以单相全桥结构P…

数据结构之链表操作详解与示例(反转链表,合并链表,旋转链表,对链表排序)

文章目录 1. 反转链表2. 合并链表3. 旋转链表4. 对链表排序总结 链表是一种常见的基础数据结构,它在内存中的存储方式非常灵活。本文将详细介绍反转链表、合并链表、旋转链表以及对链表排序这四种操作,并提供C和C的实现示例。 1. 反转链表 反转链表意味…

可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

自动化产线 搭配数据采集监控平台 创新与突破

自动化产线在现在的各行各业中应用广泛,已经是现在的生产趋势,不同的自动化生产设备充斥在各行各业中,自动化的设备会产生很多的数据,这些数据如何更科学化的管理,更优质的利用,就需要数据采集监控平台来完…

昇思25天学习打卡营第04天|数据变换 Transforms

一、什么是数据变换 Transforms ? 通常情况下,直接加载的原始数据并不能直接送入神经网络进行训练,此时我们需要对其进行数据预处理。MindSpore提供不同种类的数据变换(Transforms),配合数据处理Pipeline来…

Docker存储目录问题,如何修改Docker默认存储位置?(Docker存储路径、Docker存储空间)etc/docker/daemon.json

文章目录 如何更改docker默认存储路径?版本1(没测试)版本2(可行)1. 停止 Docker 服务:2. 创建新的存储目录:3. 修改 Docker 配置文件:4. 移动现有的 Docker 数据:5. 重新…

电脑录屏win10可以用的软件有哪些?分享3款经典的!

在数字化时代,屏幕录制已成为我们工作、学习和娱乐中不可或缺的一部分。无论是教学演示、游戏直播还是软件操作教程,屏幕录制都能帮助我们轻松记录并分享屏幕上的精彩瞬间。那么,对于使用Win10系统的用户来说,有哪些值得推荐的屏幕…

可商用、性能超强!新开源Mamba架构纯代码模型

7月17日,法国著名开源大模型平台Mistral.ai在官网开源了,基于 Mamba架构的纯代码模型——Codestral Mamba。 根据测试数据显示,Codestral Mamba只有70亿参数,但性能却是Meta开源的知名代码模型CodeLlam 7B的两倍,成为…

Chromium源码阅读(9):了解事件跟踪TRACE_EVENT与第三方库Perfetto

Perfetto - System profiling, app tracing and trace analysis Perfetto 是一个用于性能检测和跟踪分析的生产级开源堆栈。它提供用于记录系统级和应用级跟踪的服务和库、本机 Java 堆分析、使用 SQL 分析跟踪的库以及用于可视化和探索多 GB 跟踪的基于 Web 的 UI。 See ht…