摘要:的一點理解用其官網(wǎng)的話來說是一個用于數(shù)據(jù)可視化的庫。其將數(shù)據(jù)與綁定,通過建立數(shù)據(jù)與元素樣式之間的關(guān)系,來表現(xiàn)數(shù)據(jù),實現(xiàn)可視化。它也是上星第多的庫。
D3的一點理解 D3
用其官網(wǎng)的話來說:
D3.js is a JavaScript library for manipulating documents based on data. D3 helps you bring data to life using HTML, SVG, and CSS.
D3是一個用于數(shù)據(jù)可視化的JS庫。其將數(shù)據(jù)與DOM綁定,通過建立數(shù)據(jù)與DOM元素樣式之間的關(guān)系,來表現(xiàn)數(shù)據(jù),實現(xiàn)可視化。它也是github上星第4多的JS庫。
不用工具繪制一個柱狀圖成果圖如下
代碼如下
...整理思路如下
選擇畫布
let chart = document.getElementsByClassName("chart")[0]
創(chuàng)建元素,通過元素的樣式來表現(xiàn)數(shù)據(jù)
let div = document.createElement("div") div.style.width = `$77b5tffpx` div.textContent = d
將元素添加到畫布上
chart.appendChild(div)用D3繪制一個柱狀圖
整個思路中,首先要注意數(shù)據(jù)與元素數(shù)量之間的關(guān)系
有多少組數(shù)據(jù),就應(yīng)該對應(yīng)有多少個元素
其次就是建立數(shù)據(jù)與元素樣式之間的函數(shù)關(guān)系,
例如數(shù)據(jù)與元素寬度之間的函數(shù)關(guān)系
function (data) { return data + "px"; }
數(shù)據(jù)與元素文本內(nèi)容之間的函數(shù)關(guān)系
function (data) { return data; }
我個人覺得,d3的 Data-Driven Documents,主要體現(xiàn)就是以上兩點
用d3實現(xiàn)同樣效果如下
理解數(shù)據(jù)與元素數(shù)量之間的關(guān)系
數(shù)據(jù)
let data = [30, 86, 168, 281, 303, 365]本身就有對應(yīng)數(shù)量的元素
如果在 .chart 中有對應(yīng)數(shù)量的 div
那么就不需要額外添加 div 元素
d3.select(".chart") .selectAll("div") .data(data) .style("width", function (d) { return d + "px"; }) .text(function (d) { return d; });本身就沒有元素
如果沒有 div 元素,就需要通過 enter().append("div") 來添加相應(yīng)數(shù)量的元素
其中 enter()
Returns the enter selection: placeholder nodes for each datum that had no corresponding DOM element in the selection. (The enter selection is empty for selections not returned by selection.data.)
d3.select(".chart") .selectAll("div") .data(data) .enter().append("div") .style("width", function (d) { return d + "px"; }) .text(function (d) { return d; })本身有過多數(shù)量的元素
如果在 .chart 中有過多數(shù)量的 div
那么就需要將多余的 div 移除,通過 exit().remove() 來實現(xiàn)
其中 exit()
Returns the exit selection: existing DOM elements in the selection for which no new datum was found. (The exit selection is empty for selections not returned by selection.data.)
d3.select(".chart") .selectAll("div") .data(data) .style("width", function (d) { return d + "px"; }) .text(function (d) { return d; }) .exit().remove()更新數(shù)據(jù)與元素數(shù)量之間的關(guān)系
首先要知道在 d3 中,數(shù)據(jù)與 DOM 元素并不是雙向綁定的,在將數(shù)據(jù)綁定到元素之后,再次修改數(shù)據(jù),元素并不會產(chǎn)生對應(yīng)的變化
所以數(shù)據(jù)更新要手動完成
function update(data) { d3.select(".chart") .selectAll("div") .data(data) .style("width", function (d) { return d + "px"; }) .text(function (d) { return d; }) // 如果元素不夠,補足 d3.select(".chart") .selectAll("div") .data(data) .enter().append("div") .style("width", function (d) { return d + "px"; }) .text(function (d) { return d; }) // 如果元素多余,移除 d3.select(".chart") .selectAll("div") .data(data) .exit().remove() }
完整實驗代碼
小結(jié)D3.js
d3提供的選擇方法,能處理數(shù)據(jù)與元素數(shù)量不匹配的情況
當元素數(shù)量不夠時,通過enter()能選擇到那些用于補足的元素
當元素數(shù)量過多時,通過exit()能選擇那些過剩的元素
d3方便了通過元素的樣式來展現(xiàn)數(shù)據(jù)的過程,用戶自己定義數(shù)據(jù)與元素樣式之間的函數(shù)關(guān)系
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/90481.html
摘要:之前只是各個部分的,現(xiàn)在將各部分整合起來,發(fā)現(xiàn)還是學(xué)到了不少東西主要是加深了對比例尺的理解代碼樣式及數(shù)據(jù)樣式接著是數(shù)據(jù)及柱狀圖寬高等留白用創(chuàng)建比例尺實踐之后對比例尺與坐標軸的理解加深了一點軸使用線性比例尺,注意輸入域軸使用比例尺用于柱形 d3js.org v5.9.2 之前只是各個部分的demo,現(xiàn)在將各部分整合起來,發(fā)現(xiàn)還是學(xué)到了不少東西 主要是加深了對scale(比例尺)的理解...
摘要:第一節(jié)點位于第二節(jié)點內(nèi)。例如,返回意味著在在內(nèi)部,并且在之前。這個函數(shù)返回一個函數(shù),返回的函數(shù)綁定了當前對象并執(zhí)行。 這是繼上一篇D3源碼解構(gòu)文章后的對D3的研究筆記,筆者的能力有限,如有哪里理解錯誤,歡迎指正。 對集合的操作 關(guān)于d3.attr 一個可以處理很多情況的函數(shù),當只傳入一個參數(shù)時,如果是string,則返回該屬性值,如果是對象,則遍歷設(shè)置對象的鍵值對屬性值,如果參數(shù)大于等...
摘要:數(shù)據(jù)可視化圖表圖表作為數(shù)據(jù)可視化最常見的表現(xiàn)形式之一,往往被以偏概全的認為圖表就是數(shù)據(jù)可視化。嚴格來說,數(shù)據(jù)可視化應(yīng)該是連接數(shù)據(jù)與視覺的一個映射關(guān)系,將數(shù)據(jù)映射成人更容易感知其規(guī)律的可視化結(jié)果。 題目中的新一代是個相對的概念,事實上本文即將介紹的方法已經(jīng)有了生產(chǎn)環(huán)境可用的實現(xiàn)方案(這也側(cè)面佐證了其可行性),但考慮到此方法與現(xiàn)在大部分前端項目中所使用的數(shù)據(jù)可視化方案相比仍有一些優(yōu)勢,因此...
閱讀 2398·2021-11-23 09:51
閱讀 1209·2021-11-22 13:54
閱讀 3422·2021-09-24 10:31
閱讀 1066·2021-08-16 10:46
閱讀 3619·2019-08-30 15:54
閱讀 700·2019-08-30 15:54
閱讀 2886·2019-08-29 17:17
閱讀 3154·2019-08-29 15:08