D3.js 学习之路

D3.js 简介

原文: https://medium.com/@enjalot/the-hitchhikers-guide-to-d3-js-a8552174733a

译文源代码地址: https://github.com/ssthouse/d3-blog/blob/master/d3-guide/d3_roadmap_cn.md

如果这篇文章对你有帮助的话, 不妨点个赞 :tada:

github 地址: https://github.com/ssthouse/d3-blog

学习D3.js的旅途中看到的风景十分美妙, 壮丽 有时甚至有些崎岖. 你可能会被d3.js文档长长的function列表所吓到(d3’s API documentation ), 或者被成堆的教程弄的疲惫不堪( dozens of tutorials). 这里有超过两万个例子你可以用来学习: 20,000+ d3 examples , 但你不知道哪些是真正对你学习D3.js有帮助的.

[图片上传失败...(image-bcf22e-1528779066105)]

如果你只是想要快速得到一个柱状图或者图表, 那么这篇文章可能不太适合你. 这里有很多库可以帮你做到这一点: plenty of charting libraries . 如果你更倾向于看书学习, 这本书也许是你不错的起点 Interactive Data Visualization for the Web. Elijah MeeksD3.js in Action 可以帮助你更好的了解D3的API.

这篇文章目的是让你在思想上做好学习D3的准备, 并且提供一些接下来学习的方向. 除了对于D3本身API的学习, 关于web标准的HTML, SVG, CSS, Javascript 和 数据可视化的概念,标准都是需要学习的. 很有可能你已经知道上面这些中的一部分, 这篇文章旨在为你继续学习提供一个好的起点.

[图片上传失败...(image-4c525b-1528779066105)] sets the bar high](https://cdn-images-1.medium.com/max/3676/1ofBagXi1x0h8TdHF8tc3nA.png)r2d3.us visual introduction to machine learning 设置了一个很高的起点*

在我们进入数据可视化和代码技巧的学习之前, 先让我们看看一些能让我们激发学习兴趣的东西. 这里有很多让人惊叹的例子, 不妨点进去看一看, 并给自己设定一个学习目标: New York Times article, r2d3, distill.pub, datasketch|es, polygraph, ncase.

不要只是看看就好, 你可以给自己设定一个大一点的目标. 我从这篇文章中学习到, 最好的学习方式就是给自己设定一个想要完成的任务, 并且绞尽脑汁的去完成它: interviewing some of the top data visualization practitioners using d3.js .

图形化的展现形式

D3 并没有引入一种新的视觉展现形式. 不同于 Processing, Raphaël, 或者 Protovis, D3 图形方面的词汇都是直接来自于 web标准: : HTML, SVG, and CSS
http://d3js.org

[图片上传失败...(image-86974e-1528779066105)] has made some beautiful nutrition visualizations](https://cdn-images-1.medium.com/max/2000/1GaASA7rqnQVDpHQs9BdbqA.png)学习D3来写图表就像是学习法语来写营养标签. 公平的来说 , @syntagmatic 确实做出了非常不错的 营养标签*

图表仅仅是内部有一些形状的矩形. 而D3提供的是一种让你通过操作图标或者你自己定义的图形来表达你想要展示数据的方式. 它让你可以轻易地为你的图形添加可视化交互, 定义你的图形有怎样的行为. 你在D3中学到的将是一种可视化的表达方式, 这是你在其他library中所得不到的.

如果你想要了解人们所用的不同种类的标记和图形符号所遵循的准则, 你可以参考这本书: Grammar of Graphics.

不过不用担心, 仅仅是用圆圈和矩形你就已经可以写出无数具有创造力的作品了. 从简单的事情做起, 先在屏幕上展示一些东西, 再慢慢优化它.

在Web展示上

[图片上传失败...(image-6a6eeb-1528779066105)] 是对web标准的图形操作非常棒的展示](https://cdn-images-1.medium.com/max/4432/1TwUCVhrN9Xltsj3sDgntUQ.png)SVG Beyond Mere Shapes 是对web标准的图形操作非常棒的展示*

我们选择D3的原因之一是: 你可以非常方便的将你的作品分享给任何有浏览器的人. 这意味着你需要对于HTML5有一个基本的了解. 在你开始学习D3的API之前, 你应该已经掌握 SVG, HMTL 和 CSS的基本知识. 如果有时间的话, 你最好看看这篇讲Canvas的文章(如果你要展示的数据数据量非常大的话) learn some Canvas . 我推荐你也看看这篇, 它能帮你很好的将Canvas和D3结合使用 this is a great intermediate tutorial.

对于SVG, 我推荐看看这个简短有趣的介绍 SVG primer 来自 Scott Murray. 使用工具: BlockBuilder 来迅速开始你的coding而不用费时配置开发环境. 你也可以看看MDN对于SVG的官方文档 MDN reference site for SVG. 等你掌握了SVG的基础知识后, 你可以再看看这篇文章, 可以让你对SVG有一个更深的理解 SVG beyond mere shapes 来自 Nadieh Bremer.

[图片上传失败...(image-5121e0-1528779066105)] makes it easy to play with web standards!](https://cdn-images-1.medium.com/max/2140/1PFwvxtqLRRVekNoMufclzw.gif)http://blockbuilder.org 让你可以快速上手玩转web图形标准!*

其实你甚至可以不用使用 SVG来进行图形展示, 有时候直接用 div 就足以让你做出想要的效果. 当然这要求你对 CSS 有较好的掌握: CSS positioning . 为了达到你想要的效果, 你甚至可以 混用 HTML, SVG , Canvas!

开始学习 d3.js

[图片上传失败...(image-e05287-1528779066105)]](https://cdn-images-1.medium.com/max/4424/1KfsnI5vicI0ozs1uP85Pfg.png)d3js.org*

你可能见过D3的API文档, 展示着成堆的Function: d3’s API, 幸运的是, 现在D3已经拆分为了一个个的模块, 所以我们从中挑选一些特别常用的来进行介绍.

d3-scale

[图片上传失败...(image-791183-1528779066105)] are one common use of scales!](https://cdn-images-1.medium.com/max/3728/1c2dJV4ZNJGdWdWNV3AVPxQ.png)colors 是对于scale非常常见的一种使用方式*

scales是D3中非常基础的一个工具. 你可以从这里对它有一个大概的了解: Introducing d3-scale 来自D3作者 Mike Bostock. 无论你做什么样的数据可视化, 你都非常有可能用到一种或多种scale.

d3-shape

[图片上传失败...(image-d355fe-1528779066105)], thanks to SVG paths!](https://cdn-images-1.medium.com/max/3828/16HpzsxMbWhLgTbAZNpf9Kg.png) streamgraph,感谢 SVG paths!*

SVG 的path非常冗杂 (see this thorough overview), 所以 d3-shape 提供了一些让我们非常方便创建并操作SVG path的方法. 你可以看看 Mike 的 Introducing d3-shape 来了解它的作用并着手开始使用它. d3-shape 还可以帮助你在Canvas中绘制各种各样的图形, 你仅仅添加一行代码就能将SVG的path添加到Canvas中!

d3-selection

[图片上传失败...(image-59c9f1-1528779066105)]](https://cdn-images-1.medium.com/max/2000/1-qbObwrIKYG3_bKpZBaUgw.gif)the General Update Pattern*

D3中最难以理解的部分可能就是它的selection了, 同样的, 看看D3作者的文章能让你对D3的selection模型有一个更好的理解: General Update Pattern. 我花了好几个月用脑袋锤桌子才最终理解了selection模型, 但是不要为此感到害怕! 你并不需要完完全全的掌握selection的所有api才能完成一份D3的作品. 当你做好了学习的准备, 你可以从这篇文章开始: d3-selections README. 还有, 请一定看看这篇文章, 非常有助于理解selection模型 Thinking in Joins.

d3-collection

[图片上传失败...(image-8ea067-1528779066105)]](https://cdn-images-1.medium.com/max/3808/1jcnYXBvv1W033jfwFOrS1A.png)d3-nest 让你可以非常轻松的 将相似的数据归结在一起*

操作数据是数据可视化中非常重要的步骤. 有时候这甚至是最困难的一部 (如果你的数据集不是很完美, 或者你对它没有很好的理解). 虽然有很多可以帮助进行数据处理的工具, 这里我还是推荐看看d3 collection d3-collection,特别是这个模块: nest function.

d3-hierarchy

[图片上传失败...(image-29478f-1528779066105)] is easy to layout thanks to d3-hierarchy](https://cdn-images-1.medium.com/max/2580/11CszAZA3t5oMlTOMFchzSg.png) Treemap 感谢 d3-hierarchy*

接着上面对于 数据操作 的讨论. 在很多数据可视化中, 按照数据的结构对其进行相应的展示是非常关键的一点. 你可以在这里找到很多工具Function, 它们能帮你很方便的进行这样的数据处理: d3-hierarchy 绘制树状结构的数据.

d3-zoom

[图片上传失败...(image-56f439-1528779066105)]!](https://cdn-images-1.medium.com/max/2000/1R96BnzJUPFSzTzWoxIBIAw.gif)zooming is fun!*

缩放是一种非常常见的数据可视化交互, D3的作者 Mike 给出了 一系列的例子 展示如何将缩放功能引入你的数据可视化作品中 d3-zoom. 你也可以看看和 缩放 非常类似的一种操作 拖拽 d3-drag

d3-force

[图片上传失败...(image-8c1211-1528779066105)], amirite?](https://cdn-images-1.medium.com/max/2000/1*MiNLItcbqWuZP5y6DHVEsg.gif)

sparse matrices

D3中非常让人们感到惊艳的功能之一是 d3 force layout. 它非常容易上手使用, 但是很难真正掌握. 详细信息请参考: d3-force.

搜索!

最后一个tip: 你可以在这个网址对任何API Function搜索使用案例: BlockBuilder’s search.你甚至可以将你的搜索范围限定版本的d3上!

[图片上传失败...(image-712b3d-1528779066105)]look at all those blocks!

D3社区

[图片上传失败...(image-2e35d3-1528779066105)]](https://cdn-images-1.medium.com/max/2824/1m3WWkrnN1pr6V-pFZgK8KQ.png)Blockiverse*

和志同道合的人们联系起来! 你可以加入我们的slack channel: d3.js slack channel. 或者找到和你最近的D3线下活动: https://www.meetup.com/topics/d3-js/). 如果你对D3非常狂热的话, 来参加SF每年秋天的聚会吧! annual d3.unconf!

[图片上传失败...(image-f1812a-1528779066105)]我对于D3社区 和 D3学习过程中困难的理解

非常感谢 Erik Hazzard 帮助我编辑和润色这篇文章. 感谢 Kai Chang 对于文章提出的建议, 更加感谢你对于 d3 社区的帮助. 感谢slack channel #teaching-d3 in the d3js Slack, 特别是 SebastianJohn 的反馈. 当然了, 最最感谢D3的作者 Mike Bostock 创造了一个能让我们所有人玩耍的乐园 !

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,428评论 25 707
  • 老公养鱼的经历可谓罄竹难书了。花很多时间和金钱去养草养很多种鱼。死了许多鱼,养活一批鱼,卖了一些鱼。天天鼓捣鱼。我...
    神奇魔刀小姐姐阅读 178评论 0 0
  • 金句,1.来到了监狱,思想交给上帝,指的是在监狱里没人领一本圣经,身体却被监狱所控制着。 - 梦想和希望什么...
    蔬书菜阅读 408评论 1 0
  • 01《岁月神偷》金玟岐 时间是一趟匆匆流逝的东西,以前晴时有你,阴时还可以想你,就连那些哭泣的时光都纯粹快活。谁还...
    暮雨清风阅读 5,050评论 140 190
  • 越过黄河 跨过长江 飞驰的列车 把战士从军营带回故乡 多不舍 握了十几年的钢枪 多不舍 穿了十几年的军装 多不舍 ...
    赖纯红阅读 391评论 0 0