昨天我們已經成功的將 D3.js 放入 Vue.js 裡面,藉由 Vue.js 的 生命週期鉤子
與 監聽
來驅動函式重新繪製圖表,而今天要來說明的是 D3.js 中的資料處理與篩選:
註:這裡指的資料處理是指對以優化過的資料集做延伸的處理,倘諾資料集本身需要大量的欄位調整、優化則建議需在資料庫、後端回傳 API 前就先將資料集處理完畢。
filter()
在 D3.js 中的 filter()
與 JavaScript 中的 filter()
使用起來的功用差不多,主要用意是回傳資料集中符合條件的資料內容,主要使用時機與位置是在綁定資料集之後才來篩選,我們以昨天合併完的程式碼為例:
昨天範例在 Vue.js methods
中,我們有一段 draw()
函式用來繪製圖表,我們將 filter()
插入在新增元素之前:
1 | draw(newData) { |
最後因為資料集中 [10, 20, 30]
中只剩下一筆資料符合,因此可以看到畫面上只剩下一個半徑為 30
的圓形。
sort()
sort()
的功用則也與 JavaScript 原生的用法類似,目的在於排列資料集中的順序,並且我們也同樣可以傳入排列的函式,來變更排序的方法:
- sort() :若不填入比較函式,則預設內部會返回
d3.ascending(a,b)
的遞增排列。 - d3.ascending(a,b): 將資料集的資料遞增排列。
- d3.descending(a,b): 將資料集的資料遞減排列。
使用時機是放在綁定資料的後方,例如昨天程式碼中,我們在 update
變數中綁定資料的位置裡:
1 | draw(newData) { |
如此一來, dataset
在綁定資料給 D3.js 的選擇集之前,就會將原本的資料 [10, 20, 30]
重新排列成 [30, 20, 10]
,因此繪製圖型時最後便會顯示:
D3.js 常用的封裝函式
而除了以上兩種資料處理方法,D3.js 也提供了許多已經封裝好的數學函式可以直接對資料集做運算,以下列出幾個較為常用的運算函式:
求數值
d3.min()
:找出傳入陣列中的最小值。d3.max()
:找出傳入陣列中的最大值。d3.extent()
:找出傳入陣列中的最小值、最小值,返回一個[最小值, 最大值]
。d3.sum()
:將傳入陣列中的每筆資料加總起來。d3.mean()
:求出傳入陣列中的平均數,並且忽略掉陣列中的undefined
、NaN
等等資料。d3.median()
:求出傳入陣列中的中位數。d3.deviation()
:求出傳入陣列中的標準差。
1 | let dataset = [1, 3, 2, 5, 9]; |
操作陣列
d3.shuffle()
:將傳入陣列資料隨機打亂。d3.merge()
:傳入一個陣列,將陣列中所有資料合併為一個陣列。d3.range()
:返回一個等差數列。
1 | let dataset = [1, 3, 2, 5, 9]; |
以上為 D3.js 對資料集操作的常用 API 整理,而其餘沒列到內容可在 官方網站 中查詢,因此假若下次要對資料集操作時,不彷可以看看官方網站是否已經有提供 API 來操作資料集,透過已經提供的 API 來操作資料就可以寫出味道聞起來較為 D3.js 的程式碼,而讓其他人一看就能瞭解資料邏輯是怎麼處理的囉!
今天的阿橘看 UI/UX 書看到睡著。