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有幫助的.
如果你隻是想要快速得到一個柱狀圖或者圖表, 那麼這篇文章可能不太适合你. 這裡有很多庫可以幫你做到這一點:
plenty of charting libraries. 如果你更傾向于看書學習, 這本書也許是你不錯的起點
Interactive Data Visualization for the Web.
Elijah Meeks的
D3.js in Action可以幫助你更好的了解D3的API.
這篇文章目的是讓你在思想上做好學習D3的準備, 并且提供一些接下來學習的方向. 除了對于D3本身API的學習, 關于web标準的HTML, SVG, CSS, Javascript 和 資料可視化的概念,标準都是需要學習的. 很有可能你已經知道上面這些中的一部分, 這篇文章旨在為你繼續學習提供一個好的起點.
sets the bar high](
https://user-gold-cdn.xitu.io/2018/6/12/163f24615b562fcd?w=1838&h=812&f=png&s=42330)
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
has made some beautiful
nutrition visualizations](
https://user-gold-cdn.xitu.io/2018/6/12/163f2461562c382e?w=921&h=293&f=png&s=267173)學習D3來寫圖表就像是學習法語來寫營養标簽. 公平的來說 ,
@syntagmatic确實做出了非常不錯的
營養标簽圖表僅僅是内部有一些形狀的矩形. 而D3提供的是一種讓你通過操作圖示或者你自己定義的圖形來表達你想要展示資料的方式. 它讓你可以輕易地為你的圖形添加可視化互動, 定義你的圖形有怎樣的行為. 你在D3中學到的将是一種可視化的表達方式, 這是你在其他library中所得不到的.
如果你想要了解人們所用的不同種類的标記和圖形符号所遵循的準則, 你可以參考這本書: Grammar of Graphics
不過不用擔心, 僅僅是用圓圈和矩形你就已經可以寫出無數具有創造力的作品了. 從簡單的事情做起, 先在螢幕上展示一些東西, 再慢慢優化它.
在Web展示上
是對web标準的圖形操作非常棒的展示](
https://user-gold-cdn.xitu.io/2018/6/12/163f2461640c2160?w=2216&h=1056&f=png&s=475378 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 Bremermakes it easy to play with web standards!](
https://user-gold-cdn.xitu.io/2018/6/12/163f246243fe3b17?w=1070&h=740&f=gif&s=17577806 http://blockbuilder.org讓你可以快速上手玩轉web圖形标準!
其實你甚至可以不用使用 SVG來進行圖形展示, 有時候直接用
div
就足以讓你做出想要的效果. 當然這要求你對
CSS
有較好的掌握:
CSS positioning. 為了達到你想要的效果, 你甚至可以
混用 HTML, SVG , Canvas!
開始學習 d3.js
https://user-gold-cdn.xitu.io/2018/6/12/163f2461737ba4ea?w=2212&h=450&f=png&s=1552138 d3js.org你可能見過D3的API文檔, 展示着成堆的Function:
d3’s API, 幸運的是, 現在D3已經拆分為了一個個的子產品, 是以我們從中挑選一些特别常用的來進行介紹.
d3-scale
are one common use of scales!](
https://user-gold-cdn.xitu.io/2018/6/12/163f24625b61f204?w=1864&h=736&f=png&s=6716 colors是對于scale非常常見的一種使用方式
scales是D3中非常基礎的一個工具. 你可以從這裡對它有一個大概的了解:
Introducing d3-scale來自D3作者 Mike Bostock. 無論你做什麼樣的資料可視化, 你都非常有可能用到一種或多種scale.
d3-shape
, thanks to SVG paths!](
https://user-gold-cdn.xitu.io/2018/6/12/163f24627a87c141?w=1914&h=806&f=png&s=154258)*
streamgraph,感謝 SVG paths!*
SVG 的path非常冗雜 (
see this thorough overview), 是以
提供了一些讓我們非常友善建立并操作SVG path的方法. 你可以看看 Mike 的
Introducing d3-shape來了解它的作用并着手開始使用它. d3-shape 還可以幫助你在Canvas中繪制各種各樣的圖形, 你僅僅添加一行代碼就能将SVG的path添加到Canvas中!
d3-selection
https://user-gold-cdn.xitu.io/2018/6/12/163f2462716413d7?w=760&h=320&f=gif&s=661762)the
General Update PatternD3中最難以了解的部分可能就是它的selection了, 同樣的, 看看D3作者的文章能讓你對D3的selection模型有一個更好的了解:
. 我花了好幾個月用腦袋錘桌子才最終了解了selection模型, 但是不要為此感到害怕! 你并不需要完完全全的掌握selection的所有api才能完成一份D3的作品. 當你做好了學習的準備, 你可以從這篇文章開始:
d3-selectionsREADME. 還有, 請一定看看這篇文章, 非常有助于了解selection模型
Thinking in Joinsd3-collection
https://user-gold-cdn.xitu.io/2018/6/12/163f24635906997c?w=1904&h=974&f=png&s=109140)d3-nest 讓你可以非常輕松的
将相似的資料歸結在一起操作資料是資料可視化中非常重要的步驟. 有時候這甚至是最困難的一部 (如果你的資料集不是很完美, 或者你對它沒有很好的了解). 雖然有很多可以幫助進行資料處理的工具, 這裡我還是推薦看看d3 collection
,特别是這個子產品:
nestfunction.
d3-hierarchy
is easy to layout thanks to d3-hierarchy](
https://user-gold-cdn.xitu.io/2018/6/12/163f24634e8304af?w=1290&h=1292&f=png&s=383969 Treemap感謝 d3-hierarchy*
接着上面對于
資料操作
的讨論. 在很多資料可視化中, 按照資料的結構對其進行相應的展示是非常關鍵的一點. 你可以在這裡找到很多工具Function, 它們能幫你很友善的進行這樣的資料處理:
繪制樹狀結構的資料.
d3-zoom
!](
https://user-gold-cdn.xitu.io/2018/6/12/163f2462f30323af?w=958&h=482&f=gif&s=4353426 zooming is fun縮放是一種非常常見的資料可視化互動, D3的作者 Mike 給出了
一系列的例子展示如何将縮放功能引入你的資料可視化作品中
. 你也可以看看和
縮放
非常類似的一種操作
拖拽
d3-drag d3-force
, amirite?](
https://user-gold-cdn.xitu.io/2018/6/12/163f24646e2d0783?w=640&h=531&f=gif&s=22162572 sparse matricesD3中非常讓人們感到驚豔的功能之一是
d3 force layout
. 它非常容易上手使用, 但是很難真正掌握. 詳細資訊請參考:
搜尋!
最後一個tip: 你可以在這個網址對任何API Function搜尋使用案例:
BlockBuilder’s search.你甚至可以将你的搜尋範圍限定版本的d3上!
look at all those blocks!
D3社群
https://user-gold-cdn.xitu.io/2018/6/12/163f24644b58fe91?w=1412&h=765&f=png&s=293806 Blockiverse和志同道合的人們聯系起來! 你可以加入我們的slack channel:
d3.js slack channel. 或者找到和你最近的D3線下活動:
https://www.meetup.com/topics/d3-js/). 如果你對D3非常狂熱的話, 來參加SF每年秋天的聚會吧!
annual d3.unconf我對于D3社群 和 D3學習過程中困難的了解
非常感謝
Erik Hazzard幫助我編輯和潤色這篇文章. 感謝
Kai Chang對于文章提出的建議, 更加感謝你對于 d3 社群的幫助. 感謝slack channel #teaching-d3 in the
d3js Slack, 特别是
Sebastian和
John的回報. 當然了, 最最感謝D3的作者
Mike Bostock創造了一個能讓我們所有人玩耍的樂園 !