前往
大廳
主題

SVG 自學微筆記(10) - SVG...為什麼?

冰抹茶拿鐵 | 2023-05-17 18:00:08 | 巴幣 100 | 人氣 143

基本上是這系列最後一篇,除非之後接觸到跟SVG相關的有趣應用! (≧▽≦)

我在大學畢業的最後一學期,選修網頁資料視覺化的課程,課程主要使用D3.js這個JavaScript擴充函式庫做資料視覺化的工作。那D3.js是什麼? 跟SVG有什麼關係呢?

D3.js

D3指的是Data-Driven Document,以資料驅動編輯網頁的DOM,更白話的說法就是可以根據資料的筆數,動態地生成相同數量的網頁元素。

再舉個實際的例子:
建立data變數,並在裡面放入三個人分別喜歡的水果資料。然後利用D3.js內建的函數,將john喜歡的水果資料匯入,D3.js就能自動根據資料筆數在body建立三個div元素,而且還能在網頁上顯示出資料的文字內容。

<script src="//unpkg.com/d3"></script>
<script>
    var data = {
        john: ['Apple', 'Orange', 'Lemon'],
        marry: ['Apple', 'Orange'],
        ryan: ['Apple', 'Cherry', 'Peach', 'Orange']
    };
    d3.select("body").selectAll('div')
      .data(data['john'])
      .enter()
      .append('div').text(function(d){return d;})
</script>


實際使用過D3.js就會發現,它的語法實在是和jQuery相當類似,不過相比於jQuery的廣泛應用,D3.js則聚焦在資料視覺化上。(雖然部分人認為jQuery正在走向沒落,但目前還是有接近95%的網站有使用jQuery喔!)

(圖片出自: W3Techs)

所以到底D3.js跟SVG有什麼關係呢? 在網頁上建立圖形畫布主要有兩大選擇,其中一個是Canvas,另一個則是SVG。想當然爾D3.js產生資料視覺化的圖形都是在SVG畫布之下囉!

我們可以在HTML檔案建立SVG畫布,然後使用D3.js的內建函數,去新增各種SVG元素並做出多樣的圖表,同時我們還能根據資料的變化,添加自訂的互動性動畫效果等等。

下圖就是透過D3.js配合SVG在網頁呈現的長條圖,原始碼因為太長就不放了。


最後來講講個人使用D3.js到現在的心得,以上面的長條圖為例,要能成功顯示x、y坐標軸,就必須仰賴不少內建函式來定義刻度的值域、寬度,而那一個個的長條(bar)也都必須自己透過函式定義位置和添加到畫布上。

總而言之,使用D3.js產生圖表必須依靠眾多的內建函式,所以需要充分理解每個函式在做什麼,我基本上都是開著官方的說明文件邊看邊寫。但也因為圖表的每個細節都可以調整,所以D3.js是追求高度客製化圖表的一大利器。

如果不是追求高度客製化圖表的話,其實還有不少更簡單的JavaScript視覺化函式庫可以使用,像是C3.js或是Chart.js等等,相信整個學習曲線會相對D3.js平滑不少。

創作回應

oVo巴爾坦星人
哥 你的名稱有點眼熟 但又對你沒啥印象 XD
2024-03-05 15:08:43
冰抹茶拿鐵
我目前有在玩的天涯明月刀M,遊戲名稱之前就叫冰抹茶拿鐵,不確定你是在哪裡看到類似的名稱[e35]
2024-03-05 22:44:22

更多創作