摘要:通過(guò)函數(shù)可以選擇出沒(méi)有關(guān)聯(lián)任何數(shù)據(jù)的圖形,可以調(diào)用相關(guān)函數(shù)更新或是刪除。
D3.js入門(mén)
1.什么是D3.js?
Data-Driver-Document(數(shù)據(jù)驅(qū)動(dòng)文檔):是一個(gè)用來(lái)使用Web標(biāo)準(zhǔn)做數(shù)據(jù)可視化的js庫(kù);
數(shù)據(jù)可視化:用交互的/可視化的方式對(duì)抽象數(shù)據(jù)進(jìn)行展示,已達(dá)到數(shù)據(jù)認(rèn)知的目的,數(shù)據(jù)是純粹的的事實(shí),純粹意味著這種事實(shí)沒(méi)有經(jīng)過(guò)任何處理,而信息是數(shù)據(jù)處理后的結(jié)果,他揭示了數(shù)據(jù)的意義;
優(yōu)勢(shì):比Processing這樣的底層繪圖簡(jiǎn)單,比Echarts這樣的高度封裝的圖表更自由,也就是說(shuō)d3.js為我們提供了一個(gè)不是特別底層,也不是高度封裝的庫(kù),能夠給使用者很好地發(fā)揮空間,同時(shí)學(xué)習(xí)成本也沒(méi)有那么大。
2.D3的數(shù)據(jù)與圖形
理解enter-updte-exit(進(jìn)入-更新-退出)模式
enter(進(jìn)入)
A:代表數(shù)據(jù)集合,就是需要可視化的數(shù)據(jù); B:代表圖形元素的集合,就是展示出的圖形;
如上圖所示,集合A中的陰影區(qū)部分表示了未被可視化的數(shù)據(jù),enter操作的意義在于通過(guò)enter()函數(shù)返回一個(gè)集合,
這個(gè)集合里面包含的就是沒(méi)有被可是可視化的數(shù)據(jù);這也就是我們數(shù)據(jù)化的第一部分
操作,找到那些沒(méi)有被可視化的數(shù)據(jù);
update(更新)
如上圖所示,陰影區(qū)域表示圖像和數(shù)據(jù)集合的交集,也就是當(dāng)前數(shù)據(jù)所對(duì)應(yīng)的圖形,通過(guò)data函數(shù),可以選擇出交集集合,然后對(duì)選擇出的集合進(jìn)行操作,對(duì)元素進(jìn)行更新;
exit(退出)
圖中的陰影表示沒(méi)有關(guān)聯(lián)任何數(shù)據(jù)的圖形,為什么會(huì)有沒(méi)有數(shù)據(jù)的圖形,一般而言是從
數(shù)據(jù)中刪除了數(shù)據(jù)產(chǎn)生的。通過(guò)exit函數(shù)可以選擇出沒(méi)有關(guān)聯(lián)任何數(shù)據(jù)的圖形,可以調(diào)
用相關(guān)函數(shù)更新或是刪除。
3.實(shí)例
柱狀圖
var data = [10, 15, 30, 50, 80, 65, 55, 30, 20, 10, 8]; //定義數(shù)據(jù),定義集合A function render(data) { //render函數(shù)來(lái)更新圖表 // Enter d3.select("body").selectAll("div.h-bar") //選中body,選中類名為h-bar的div,其實(shí)此時(shí)頁(yè)面上沒(méi)有這些元素,選擇出圖形元素的集合 .data(data) // data函數(shù)將數(shù)組綁定到將要?jiǎng)?chuàng)建的圖形元素上 .enter() // enter函數(shù)選擇沒(méi)有被可視化的數(shù)據(jù)元素,render第一次調(diào)用的時(shí)候,沒(méi)有數(shù)據(jù)被可視化,所以選中的是所有的數(shù)據(jù) .append("div") // 為每一個(gè)數(shù)據(jù)創(chuàng)建一個(gè)div,這里d3為響應(yīng)的div添加了__data__屬性,這個(gè)屬性的值為綁定的數(shù)據(jù)值; .attr("class", "h-bar")//類名設(shè)置為h-bar .append("span"); //每個(gè)div中添加一個(gè)span // Update d3.select("body").selectAll("div.h-bar") .data(data) //定義圖形集合和數(shù)據(jù)集合,更新模式下,data()函數(shù)返回?cái)?shù)據(jù)集合和圖形集合的交集 .style("width", function (d) { // 在和數(shù)據(jù)關(guān)聯(lián)的圖形更改屬性,所有的d3修飾函數(shù)都可以使用這樣的函數(shù)來(lái)修改圖形元素的屬性,這個(gè)函數(shù)有一個(gè)形參,d代表與對(duì)應(yīng)圖形元素關(guān)聯(lián)的數(shù)據(jù)值 return (d * 3) + "px"; }) .select("span") // 子元素能拿到父級(jí)元素的值 .text(function (d) { return d; }); // Exit d3.select("body").selectAll("div.h-bar") .data(data) .exit() //得到?jīng)]有任何數(shù)據(jù)關(guān)聯(lián)的圖形元素 .remove();//移除這些元素 } setInterval(function () { data.shift(); data.push(Math.round(Math.random() * 100)); render(data); }, 1500); render(data);
參考文獻(xiàn):《D3.js數(shù)據(jù)可視化實(shí)戰(zhàn)手冊(cè)》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/82849.html
摘要:入門(mén),根據(jù)官網(wǎng)部分教程學(xué)習(xí),發(fā)現(xiàn)因?yàn)榘姹靖?,有些和概念可能不適用,但總體思想未變。 入門(mén)d3.js,根據(jù)官網(wǎng)部分教程學(xué)習(xí),發(fā)現(xiàn)因?yàn)榘姹靖拢行゛pi和概念可能不適用,但總體思想未變。本文思路跟隨此篇blogLet’s Make a Bar Chart學(xué)習(xí),加上自己的理解,并且查閱了部分更新資料 元素選擇 d3通過(guò)d3.select()或者d3.selectAll()獲取元素,這兩個(gè)...
摘要:安裝就是一個(gè)的庫(kù),不需要安裝,可下載文件或直接引用網(wǎng)絡(luò)鏈接。示例選擇集,與原生中的用法類似,返回匹配的第一項(xiàng),返回匹配的所有項(xiàng)。 安裝 d3.js就是一個(gè)js的庫(kù),不需要安裝,可下載文件或直接引用網(wǎng)絡(luò)鏈接。 示例 first psecond pthird p 選擇集 select(),selectAll() 與原生js中的querySelector querySelectorAll...
摘要:小弟在前端摸爬滾打一段時(shí)間,發(fā)現(xiàn)前端的比較好的文檔比較分散,特別是中文的,我平時(shí)都是收藏在瀏覽器里,以后有好的教程和綜合性的文檔我會(huì)更新到這里。小組中文文檔,很全。 小弟在前端摸爬滾打一段時(shí)間,發(fā)現(xiàn)前端的比較好的文檔比較分散,特別是中文的,我平時(shí)都是ctrl+D收藏在瀏覽器里,以后有好的教程和綜合性的文檔我會(huì)更新到這里。一則可以做個(gè)記錄,防止丟失。二則有需要的朋友可以來(lái)我這里找一找。 ...
摘要:本片記錄坐標(biāo)軸入門(mén),使用版本如何實(shí)現(xiàn)坐標(biāo)軸生成的坐標(biāo)圖是通過(guò)的路徑元素元素組成的,如下圖表示的是底部坐標(biāo)軸不包括內(nèi)部刻度,如下這部分通過(guò)描繪,在中稱為容器則包括了和作為即線,即文字實(shí)現(xiàn)坐標(biāo)軸主要步驟步驟主要如下創(chuàng)建比例尺創(chuàng)建坐標(biāo)軸,是個(gè)函數(shù) 本片blog記錄d3坐標(biāo)軸入門(mén),使用版本v5.9.2 SVG如何實(shí)現(xiàn)坐標(biāo)軸 d3生成的坐標(biāo)圖是通過(guò)svg的path(路徑)元素 + g + lin...
摘要:使用創(chuàng)建動(dòng)態(tài)圖表主要使用到了部分的,通過(guò)他們可以完成動(dòng)畫(huà)我的學(xué)習(xí)記錄是通過(guò)一個(gè)例子了解這些會(huì)動(dòng)的柱狀圖還是拿之前的例子,代碼在此完整的柱圖修改的代碼部分在于創(chuàng)建處原來(lái)的代碼加上動(dòng)畫(huà)效果后代碼如下動(dòng)畫(huà)開(kāi)始前狀態(tài)返回持續(xù)時(shí)間,是的動(dòng)畫(huà)函數(shù), d3js v5.9.2 使用d3創(chuàng)建動(dòng)態(tài)圖表主要使用到了d3.trasition部分的API,通過(guò)他們可以完成動(dòng)畫(huà) 我的學(xué)習(xí)記錄是通過(guò)一個(gè)例子了解...
閱讀 1030·2021-11-24 09:39
閱讀 3472·2021-10-27 14:20
閱讀 2374·2019-08-30 14:08
閱讀 3442·2019-08-29 16:34
閱讀 2252·2019-08-26 12:14
閱讀 2163·2019-08-26 11:54
閱讀 2843·2019-08-26 11:44
閱讀 2533·2019-08-26 11:38