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