編者按:Google數(shù)據(jù)可視化工程師Ian Johnson指引了入門d3.js的門徑。
d3是一個(gè)豐富、廣闊,有時(shí)危險(xiǎn)的學(xué)習(xí)領(lǐng)域。d3的API文檔上長長的函數(shù)列表也許嚇壞了你,d3主頁上列出的幾十篇教程也許讓你難以選擇。有超過兩萬個(gè)d3示例可供學(xué)習(xí),但你永遠(yuǎn)不知道給定的示例是否容易理解。
如果你需要的只是快速實(shí)現(xiàn)柱狀圖或線圖,也許這篇文章不適合你,有大量制作圖表的庫可用。如果你更喜歡看書,那么Scott Murray的Interactive Data Visualization for the Web是一個(gè)很好的起點(diǎn),而Elijah Meeks的D3.js in Action比較全面地深入了部分API.
我希望這篇指南能幫助你在心智上做好理解d3的準(zhǔn)備,并指出一些值得探索的方向。除了d3.js的API外,還有很多需要學(xué)習(xí),既包括web標(biāo)準(zhǔn)方面的技術(shù)知識(shí),例如HTML、SVG、CSS、JavaScript,也包括溝通概念和數(shù)據(jù)可視化原則。你大概已經(jīng)對此有所了解,所以這篇指南試圖為你提供一個(gè)良好的起點(diǎn),幫助你學(xué)習(xí)更多你想要深入的內(nèi)容。
溝通復(fù)雜概念
圖片來源:r2d3
在我們深入數(shù)據(jù)可視化原則和技術(shù)之前,先讓我們花點(diǎn)時(shí)間樹立下雄心壯志。有許多驚人的例子展現(xiàn)了d3的可能性,包括紐約時(shí)報(bào)文章、r2d3、distill.pub、datasketch|es、polygrah、ncase。如果我這里遺漏了什么,請留言告知。
不過不要僅僅艷羨別人,你需要樹立自己的雄心壯志,這是最重要的事情之一。我從一些使用d3.js的頂尖數(shù)據(jù)可視化從業(yè)者的訪談那里學(xué)到的是,最佳學(xué)習(xí)方法之一是預(yù)想你真心想要?jiǎng)?chuàng)建的東西,然后弄清楚創(chuàng)建它你需要做什么。
可視化表示
D3并沒有引入新的可視化表示。不同于Processing、Rapha?l、Protovis,D3的圖形記號詞匯直接來自于web標(biāo)準(zhǔn):HTML、SVG、CSS。
-- http://d3js.org
圖表不過是內(nèi)有形狀的矩形。d3提供了方法,通過操作圖形記號或創(chuàng)建自己的形狀來定義你自己的可視化表示。d3使加入視覺交互和聲明可視化行為變得容易。你將在這里學(xué)習(xí)表達(dá)不可能使用其他媒介表達(dá)的東西。
如果你想要了解這些不同類型的記號背后的原則,還有人們使用的不同種類的圖形表示,不要錯(cuò)過Grammar of Graphics一書。
不過不用擔(dān)心,僅僅基于圓圈、矩形和仔細(xì)的布局,你就可以創(chuàng)建海量有創(chuàng)意的東西。從簡單的東西開始,總是嘗試讓屏幕顯示點(diǎn)什么,然后基于這個(gè)原型開始正式創(chuàng)建過程。
基于web
圖片來源:visualcinnamon.com
使用d3.js的原因之一是你可以立刻和任何使用web瀏覽器的人(地球上至少一半人?。┓窒碜髌?。這意味著在開始調(diào)用d3 API函數(shù)前,你需要了解SVG、HTML、CSS基礎(chǔ)。如果你想渲染大量數(shù)據(jù),那么你大概也會(huì)想要學(xué)一點(diǎn)Canvas(別擔(dān)心,某種程度上說,它實(shí)際上比SVG要好學(xué))。掌握了d3和Canvas的基礎(chǔ)后,我推薦lars verspohl寫的D3 and Canvas in 3 steps這篇出色的中級教程。
至于SVG,我推薦你從Scott Murray的SVG primer開始,這篇簡短易讀的教程介紹了SVG的初步知識(shí)。建議你親自動(dòng)手試驗(yàn),手工創(chuàng)建SVG元素,看看它們是如何工作的。你可以使用BlockBuilder這樣的工具快速上手,無需配置任何開發(fā)環(huán)境。另外,你可能需要參考MDN上的SVG文檔。掌握了基礎(chǔ)之后,推薦閱讀Nadieh Bremer的SVG beyond mere shapes。
blockbuilder.org
你不用直接使用SVG制作可視化,使用d3操作
搞明白應(yīng)該使用那個(gè)渲染系統(tǒng)可能就讓你有點(diǎn)不堪重負(fù)了,更別說弄清楚如何使用任何一個(gè)渲染系統(tǒng)了。這里重申下,開始學(xué)習(xí)d3.js之前需要了解HTML、CSS、SVG(和一點(diǎn)Canvas)的基礎(chǔ),這很重要。
d3.js入門
圖片來源:d3js.org
如何基于基本原則創(chuàng)建可視化?使用大量工具函數(shù)逐一創(chuàng)建。你大概已經(jīng)知道d3的API十分繁多,所以這里我們列出在入門階段特別有幫助的一些工具。
d3-scale
scale的常見用途之一是顏色
d3工具箱中最基礎(chǔ)的工具之一是scale??梢詮腗ike Bostock寫的Introducing d3-scale這篇概覽入手,了解什么是scale,如何使用scale。不管創(chuàng)建的是什么樣的可視化,你多半會(huì)使用至少一種scale。
d3-shape
streamgraph
手寫SVG路徑相當(dāng)麻煩(參見Chris Coyier的The SVG path Syntax: An Illustrated Guide),而d3-shape包含了一些函數(shù),在某些使用場景下,這些函數(shù)使創(chuàng)建、操作SVG路徑更容易。閱讀Mike Bostock的Introducing d3-shape這篇概覽,可以了解d3-shape提供了什么,如何開始使用d3-shape。只需增加一行代碼,d3-shape就可以渲染線條、區(qū)域、任意路徑為Canvas。
d3-selection
d3最難學(xué)習(xí)的部分之一是它的selection系統(tǒng),也稱為一般更新模式。在內(nèi)化這一部分之前,我有幾個(gè)月的時(shí)間被它折磨得用頭撞桌子,但是別讓這一點(diǎn)嚇跑了你!實(shí)際上,你無需精通selection,就可以做出大量酷炫的東西。當(dāng)你準(zhǔn)備好深入這一主題的時(shí)候,你可以從d3-selection的README開始,別忘了點(diǎn)擊上面的列出的鏈接,比如Mike Bostock的Thinking with Joins。
d3-collection
操作數(shù)據(jù)是可視化的一個(gè)極為重要的部分。取決于數(shù)據(jù)有多好,以及你對數(shù)據(jù)理解多少,這可能經(jīng)常是最困難的部分。掌握更多處理數(shù)據(jù)的工具(重整形狀、切片、聚合)很有幫助。在這方面我建議熟悉下d3-collection,特別是它的nest函數(shù)。
d3-hierarchy
樹形圖
繼續(xù)處理數(shù)據(jù)這一主題,許多可視化的關(guān)鍵部分在于基于數(shù)據(jù)的結(jié)構(gòu)布局視覺表示。你可以在d3-hierarchy中找到一些常用的函數(shù),可用于制作樹圖(tree)、樹形圖(treemap)、圓圈包(circle pack)。
d3-zoom
也許你想給可視化加上縮放這一常用的交互行為。Mike Bostock給出了一系列基于d3-zoom在可視化中增加縮放的各種方法:http://blockbuilder.org/search?text=zoom&user=mbostock&d3version=v4
別忘了查看下d3-zoom的表兄弟d3-drag,它提供了拖放等交互行為。
d3-force
d3很有啟發(fā)性的能力之一是力布局。力布局易學(xué)難工,可別被它推向黑暗面!(譯者注:這里作者用了一個(gè)雙關(guān)。力布局原文為force layout,星戰(zhàn)中的原力用的也是force一詞,原力具有黑暗面。)參考GitHub的d3/d3-force文檔了解詳情。
搜索!
最后提供一個(gè)小竅門,通過BlockBuilder的搜索功能你可以查找任何API函數(shù)的用法。你還可以限制搜索的d3版本。
社區(qū)
d3.js的slack頻道是一個(gè)很活躍的線上社區(qū)。如果你想?yún)⒓泳€下聚會(huì),那么舊金山灣區(qū)的用戶組是最大的d3.js用戶組之一,不過,你大概能找到幾個(gè)離你較近的用戶組。另外,每年秋季,都在舊金山召開年度d3.unconf
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62618 -
可視化
+關(guān)注
關(guān)注
1文章
1194瀏覽量
20942
原文標(biāo)題:d3.js漫游指南
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論