iT邦幫忙

2021 iThome 鐵人賽

DAY 2
1
Modern Web

三十天成為D3.js v7 好手系列 第 2

Day2-D3基礎介紹

  • 分享至 

  • xImage
  •  

輕鬆的前言看完了,今天我們就來正式進入D3的世界吧!

本篇大綱:
基礎介紹與運作原理、使用目的/優缺點、版本變化、酷炫D3網站、推薦閱讀與參考資源(含官方文件)

D3 基本介紹與運作原理

https://ithelp.ithome.com.tw/upload/images/20210914/20134930bkvi1Pq3ZL.png

D3.js 是由 Mike Bostock 開發的一套 JS 函式庫,能用來操作 Document Object Model (DOM) 樹狀資料,將資料內容視覺化的工具。D3.js 全名是 Data-Driven Documents (資料驅動文件),這三個 D 也是 D3 的由來~而從它的英文名字就知道,這個函式庫跟數據資料(data)關係一定很緊密!

D3.js 很常被用在建立圖表,但它和 Canvas 的運作方式完全不同。它是操作 DOM 樹的 JS 函式庫,因此基本的建構元素不是圓或矩形等圖案,而是用以下方的方式:

  • 建立圖案:使用 node 節點跟 Dom 元素 去建立圖形 (畫面渲染部分使用 SVG )
  • 圖案樣式:透過 屬性 (attribute) 來調整元素的樣式
  • 目前位置:在 DOM 樹中選擇節點,非畫布上的XY座標

D3 主要是搭配 SVG 去建立圖表,但它並不只限於操作 SVG,而是能操作頁面上所有的 DOM 元素。對於沒有使用過D3.js的人來說,只看上段敘述可能有點難懂,但如果提到另外一套一樣是操作 DOM 樹的 JS 函示庫 — JQuery,應該就比較好理解了。JQ 跟 D3 一樣都是操作 DOM 元素,因此有很多地方相似,而且 D3 的選擇器跟 JQ 一樣都是使用 CSS Selector。如果現在還不太清楚也沒關係,等 Day4 講解到 D3 selection 就會懂了~

學習D3前需要了解的技術:

看完了D3的基本介紹與運作原理後,能得知在學 D3.js 之前,還需要對以下這些網頁技術有基本的掌握:

  • DOM API 與 事件模型 (event model)
  • CSS 選擇器 (Selector) 與 屬性項 (Property)
  • JS 物件模型
  • SVG

雖然 D3已經把上述的技術變得很容易使用,但使用者還是需要對這些網頁技術有一定的了解與掌握(尤其是SVG)。這也是為什麼蠻多新手覺得D3的門檻很高、學習困難。如果你的網站並不需要非常酷炫、客製化的圖表,其實還有很多更好上手的函式庫可以選擇,下面會再跟大家介紹我自己用過的兩套簡單方便圖形函式庫。

D3的特色:

接下來我們來看看 D3 的特色跟它的優缺點吧!我覺得D3的特色有以下幾點:

  • 需要運用到 html、JS、data 的技術來建構圖表
  • 畫面渲染的部分是使用SVG,但也能替換成其他套件:canvas、Tree.js、Pixi.js
  • 內建許多 API (總共有三十種分類),這些 API 能協助進行資料處理、畫面顯示計算
    *這點也是許多新手覺得困難的地方。而且 API 變動調整蠻快,網路上查找資料時,如果使用舊的或版本不對的程式碼可能無法動
    https://ithelp.ithome.com.tw/upload/images/20210914/201349305ZzxlYDrx1.jpg
    (圖片來源:多奇數位 D3 分享會)

D3 優點

一套工具總是有它的優點,才會讓人願意使用嘛~所以我們現在來講講 D3.js 的優點吧!

  1. 自由度高,能建立各式互動圖表
  2. SVG 也是DOM 之一,包含許多 DOM 的互動 (hover、mouseover),可以製作更精確的使用者互動

D3 缺點

但除了優點之外,D3 也有幾項出名的缺點

  1. 學習門檻高

    • 因為內建多種 API ,版本迭代又快
    • 需要了解許多基本技術:DOM / Event Modal、CSS selection、 JS Object 、SVG
  2. 由於畫面是使用SVG渲染,但大量的 SVG 會造成 DOM 渲染的效能瓶頸 (太多 DOM元素 在畫面上)。
    *解決方式是將畫面渲染改成 Canvas 等其他方式呈現。目前許多圖表套件也已經改用Canvas處理,就是想跳過效能問題

  3. 版本迭代快,新版的資源少(特別是中文)。所以很常查找資料時,按照別人寫的code卻跑不動,最後一查才發現是版本不同。

版本變化

幾乎每個講解D3的人,都會提到D3的版本變化。因為它的 第3版 (v3) 跟 第4版 (v4) 差異巨大,很多底層撰寫的方式都改掉了。因此直接把第三版的程式碼拿來用的話,你連圖片都看不到,眼前只有一片空白。
https://ithelp.ithome.com.tw/upload/images/20210914/201349302POoiBlgC6.jpg

但是!偏偏 v3 是最多人分享教學、範例程式碼、酷炫圖表使用的版本,因此現在網路上一查還是很多程式碼都是用 v3 寫的。如果傻傻想直接套用網路上查到的程式碼,很可能根本跑不動。而且目前D3已經出到第七版(v7)了,但很多中文的教學資源卻停留在v5,因此我這次會使用 v7 版本來講解,希望能造福更多D3苦手。

D3 替代品:

上面講到學習D3的缺點,以及有更多能替代D3函式庫,我們就先來談談想學 D3 的人通常有哪些原因吧!

我覺得會想學習並使用D3.js的人,不外乎就這兩個原因:

  1. 機歪的老闆或客戶有各種天馬行空客製化的功能想實現
  2. 想做出炫砲的圖表名留青史

但如果你並沒有這兩種需求,只是想做出簡單、清晰呈現數據的圖表,這樣的話就能考慮使用

它們兩個比 D3.js 好上手太多了,能用很容易的方式製作出圖表~ C3.js 更是基於 D3 去簡化的工具 (作者覺得 D3太難了,想弄得簡單點)。其實好用又簡單的函式庫還很多,我這邊只是列出我用過覺得簡單、方便、好上手的工具。如果沒有客製化需求的人推薦使用~

但畢竟這系列是講解 D3.js!所以話又說回來,雖然 D3 的確有點難學,不過一旦了解它原理後,會發現它真的是功能強大的工具。而且畫出超炫圖表的時候,成就感直接爆棚!為了吸引大家願意接著看完這系列,我們就先來看看 D3能做出哪些酷炫的東東吧!

D3 做出的酷東西

D3 不只是能製作酷炫的圖表,還能做出整個酷炫的網頁。以下這些是我覺得酷炫、互動性佳、又能清晰傳達想說資訊的網站:

  • womenwill (性別平等議題,Awwwards 上得獎的D3網站)
    這個是我最喜歡的網站,它的整個背景都用不同顏色的點點組成,巧妙運用動態與顏色傳達議題。而且點點還會與滑鼠互動,讓人覺得有趣又新奇

  • smartcities (城市探索,Awwwards 上得獎的D3網站)
    網站運用卷軸滾動逐步秀出圖表,滑鼠 hover 過去時還能凸顯所在的位置,非常有趣

  • investmentcalculator (生涯理財,Awwwards 上得獎的D3網站)

  • 用數據看台灣
    我個人非常喜歡的網站。它是運用台灣政府的公開資料,以圖表的方式展現目前國家的各種現狀。前陣子限電、缺水時,這裡的「台灣即時用電圖表」、「水庫即時水情圖表」也在社群火紅了一陣子。我覺得這個才是使用圖表的真諦,能清楚地將複雜、普通凡人不會去看、但卻又跟我們生活息息相關的數據,用圖表簡單的呈現給大家。

  • 聯合新聞網-數據看疫情

推薦閱讀與參考資源

看完上面使用 D3 做出的酷網站、炫圖表後,有沒有手癢難耐,想趕快了解 D3 呀?如果等不及這系列的更新,想自己去查找資料;或是想再更深入了解 D3 的話,這邊也推薦各種我覺得很棒的資源給大家~

文章教學

影片教學

  1. 多奇數位 D3 分享會 (v5)

範例程式碼

  1. The D3.js Graph Gallery (圖表豐富但有點舊,要翻新程式碼)

Github Page 圖表與 Github 程式碼

最後,這邊一樣附上我在這系列文章的程式碼與圖表GithubGithub Page,需要的人請自行取用~


上一篇
Day1-前言:三十天成為D3好手
下一篇
Day3-認識 SVG
系列文
三十天成為D3.js v7 好手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言