深入淺出d3.js數(shù)據(jù)可視化之道(1)

在去年的這個時候,d3.js在github上的star數(shù)目剛20多k藏雏,如今人數(shù)已經(jīng)飆升至67k拷况,其風靡程度可見一般,隨著大數(shù)據(jù)的發(fā)展掘殴,數(shù)據(jù)可視化也被越來越被重視赚瘦,前端工程師中又多出來一個發(fā)展方向—— 數(shù)據(jù)可視化工程師。

數(shù)據(jù)可視化的制作除了需要扎實的前端功底以外奏寨,還涉及了大量的數(shù)學計算起意,算法優(yōu)化,這些無疑又提高了數(shù)據(jù)可視化的門檻病瞳。我曾經(jīng)加過一個可視化的交流群揽咕,有人開出了 10k/day 的公司培訓價格,然鮮有人回復套菜,可見可視化人才之奇缺亲善。

學好數(shù)據(jù)可視化,走遍天下都不怕逗柴。學習可視化的同時蛹头,你除了可以學習制作更加炫酷的樣式,還可以錘煉自己js技能,提升自我的算法能力渣蜗,前端編程屠尊,無外乎css和js嗎? js足夠強大耕拷,就算以后有千千萬萬個框架讼昆,不都萬變不離其宗, 底層還是js骚烧,到時勢必左右逢源浸赫,如魚得水!

回到這個系列的主題止潘,幸運的是d3.js把許多f方法都替我們封裝好了掺炭,涉及到的最底的物理數(shù)學計算已經(jīng)很完備了辫诅,我們只需在此基礎上進行開發(fā)就行了凭戴。我的學習方法是先學會基本的api,在此基礎上炕矮,我們以做帶學么夫,通過學習制作可視化圖表,理解其實現(xiàn)原理肤视,查漏補缺档痪,并逐步將其變成自己的東西。

今天開始第一節(jié)邢滑,d3初探--創(chuàng)建更新dom及其上面綁定的數(shù)據(jù)

頂部先引入d3.js

<script src="https://d3js.org/d3.v4.min.js"></script>

js繪制部分

創(chuàng)建比例尺

當我們拿到數(shù)據(jù)的時候腐螟,很多數(shù)據(jù)可能值過大或者過小,這時候我們就需要對數(shù)據(jù)進行預處理困后,將數(shù)據(jù)處理成合適的取值范圍乐纸,便于我們進行生成圖表

  var data = [12, 25, 13, 23, 24, 55, 25, 30];

  var dataRange = d3.scaleLinear() //創(chuàng)建一個值域的線性比例尺
                                  .domain([0,100])
                                  .range([0,300]);

   var colorRange = d3.scaleLinear() //創(chuàng)建一個顏色的線性比例尺
                                    .domain([0,100])
                                    .range(["#29B6F6", "#01579B"]);
編寫渲染函數(shù)

function render(data){
-------渲染函數(shù)內(nèi)部如下------
}

// Enter  當前選擇中存在但是當前DOM元素中還不存在的每個數(shù)據(jù)元素的占位符節(jié)點。
         d3.select("body").selectAll("div.rect") 
             .data(data) //綁定數(shù)據(jù)與圖形
             .enter() //進入狀態(tài)(增加圖形匹配多余的數(shù)據(jù))
             .append("div") //生成dom節(jié)點摇予,此時已有可顯示dom
             .attr("class","rect") //添加類名
             .append("span"); //添加span

// Update 
         d3.select("body").selectAll("div.rect") 
             .data(data) //綁定數(shù)據(jù)到dom 節(jié)點
             .style("width",function(d){
                return dataRange(d) + "px"   //通過數(shù)據(jù)生成相應樣式
             })
             .style("background-color",function(d){
                return colorRange(d); 
             })
             .select("span")  // 選取當前div下的span
             .text(function(d){
                return d; //調(diào)用函數(shù)汽绢,返回與該圖形綁定的數(shù)據(jù)d
             });

 // Exit  找出在當前選擇存在的DOM元素中沒有新的數(shù)據(jù)元素
         d3.select("body").selectAll("div.rect")
             .data(data)
             .exit() 
             .remove();  (刪除沒有數(shù)據(jù)的多余的圖形)

渲染圖形

render(data); //第一次執(zhí)行

        d3.interval(function(){
            data.shift(); //刪除數(shù)組的第一個數(shù)據(jù),并添加一個數(shù)據(jù)
            data.push(Math.round(Math.random() * 100)); 
            render(data);
        },1000); //1s執(zhí)行一次

一些樣式

  body{
      font-family: "helvetica";
    }
  .rect {
      min-height: 30px;
      min-width: 10px;
      background-color: steelblue;
      margin-bottom: 2px;
      font-size: 11px;
      color: #fff;
      text-align: right;
      padding-right: 2px;
  }

好了,圖形繪制完畢侧戴。效果如下


預覽

不積跬步宁昭,無以至千里。 勿在浮沙筑高臺酗宋。初學者還是應該最簡單最基本的圖表积仗,如柱形圖,折線圖蜕猫,散點圖練習斥扛,通過對d3最基本最核心的功能學習,基礎打撈,我們才能在制作復雜圖表時更加得心應手稀颁。

源代碼地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芬失,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匾灶,更是在濱河造成了極大的恐慌棱烂,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阶女,死亡現(xiàn)場離奇詭異颊糜,居然都是意外死亡,警方通過查閱死者的電腦和手機秃踩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門衬鱼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人憔杨,你說我怎么就攤上這事鸟赫。” “怎么了消别?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵抛蚤,是天一觀的道長。 經(jīng)常有香客問我寻狂,道長岁经,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任蛇券,我火速辦了婚禮缀壤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纠亚。我一直安慰自己塘慕,他們只是感情好,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布菜枷。 她就那樣靜靜地躺著苍糠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啤誊。 梳的紋絲不亂的頭發(fā)上岳瞭,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機與錄音蚊锹,去河邊找鬼瞳筏。 笑死,一個胖子當著我的面吹牛牡昆,可吹牛的內(nèi)容都是我干的姚炕。 我是一名探鬼主播摊欠,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柱宦!你這毒婦竟也來了些椒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤掸刊,失蹤者是張志新(化名)和其女友劉穎免糕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忧侧,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡石窑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚓炬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片松逊。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肯夏,靈堂內(nèi)的尸體忽然破棺而出经宏,到底是詐尸還是另有隱情,我是刑警寧澤熄捍,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布烛恤,位于F島的核電站母怜,受9級特大地震影響余耽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苹熏,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一碟贾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轨域,春花似錦袱耽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枉长,卻和暖如春冀续,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背必峰。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工洪唐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吼蚁。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓凭需,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粒蜈,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容