D3究竟是什么勘天?

學(xué)習(xí)D3并不容易,需要比較多的基礎(chǔ)知識捉邢,像JS脯丝、HTML、SVG等都必需要掌握的伏伐,同時(shí)還需要有不錯(cuò)的邏輯思考能力宠进。但如果你能知道D3的原理,從本質(zhì)上理解D3究竟是什么藐翎,那么無論是學(xué)習(xí)還是使用D3都會更加輕松容易材蹬。

D3.js

那么D3究竟是什么呢?初學(xué)者及使用不深的開發(fā)人員可能不容易理解它吝镣,只知道可以用它開發(fā)圖表赚导。
從字面上講D3是Data-Driven Documents的縮寫,即數(shù)據(jù)驅(qū)動文本赤惊,這里說的文本是web頁面的DOM元素吼旧。官方的解釋為 D3是一個(gè)可基于數(shù)據(jù)操作文本的js庫,它可以幫助你使用HTML未舟、SVG和CSS讓數(shù)據(jù)鮮活起來圈暗,并且提供了很多可視化組件,以及數(shù)據(jù)驅(qū)動管理DOM的方法裕膀。
單純從上面的描述中是很難真正理解D3的本質(zhì)的员串,下面我們就幾個(gè)方面好好的說一下D3究竟是什么。

D3.js不是什么

或許要解答一個(gè)東西是什么昼扛,先從反面說一下它不是什么會更容易些寸齐。D3.js的目的是使用圖表展示數(shù)據(jù)欲诺,而這方面的js庫也非常多,最有名的可能就是百度的ECharts渺鹦,并且它們也的確都非常優(yōu)秀扰法,使用也更加簡單。如果你要使用這些js圖表庫毅厚,只要選擇你想要的圖表類型塞颁,然后按照它的格式要求給它數(shù)據(jù)就可以了,相反D3卻要麻煩很多吸耿。
那么為什么還要選擇D3呢祠锣?因?yàn)椋珼3與它們并不是同一類產(chǎn)品咽安,D3是相對更加底層的JS庫伴网。
ECharts等圖表庫就好比是一個(gè)模板,你只要選擇喜歡的模板妆棒,然后往里填充自己的東西即可是偷。可模板畢竟是模板募逞,不夠靈活,如果它們能滿足你的需求那是最簡單的馋评,直接用就可以放接,但如果模板無法滿足你的需求時(shí)你要怎么辦?或許你會想留特,自己修改需要修改的地方就可以了纠脾。可這真的沒有那么簡單蜕青。它們并不像PPT苟蹈、Word的模板那樣,套用后每頁都可以輕松修改內(nèi)容右核,處處都是看得見慧脱,摸得著,想怎么改都行贺喝。但圖表庫這些東西菱鸥,你要想修改它的樣子,你就必須要明白它是怎么實(shí)現(xiàn)的:它實(shí)現(xiàn)圖表的技術(shù)是什么躏鱼,結(jié)構(gòu)是怎么樣的氮采,代碼在哪里寫的,邏輯是怎么樣的染苛,怎么樣修改才不會造成各種影響……到最后如果能修改還好鹊漠,但如果發(fā)現(xiàn)根據(jù)就無法修改,那可就真是頭都大了。

D3.js是一支畫筆

與模板相對而言躯概,D3更像是一支畫筆登钥,你可以得到任何你想要的圖形圖表。與畫家畫畫一樣楞陷,只要你的基本功過關(guān)怔鳖,就可以隨心所欲畫出你想要的東西。當(dāng)然固蛾,使用畫筆作畫比向給定的輪廓(模板)里填充顏色要困難多了结执,因?yàn)槊恳粋€(gè)線條、每一處陰影等等任何東西都需要你自己考慮怎么繪制艾凯。所以在你選擇學(xué)習(xí)D3之前献幔,要先想明白你要的究竟是什么。
為了更好的理解趾诗,我們還可以說其它圖表庫是美圖秀秀蜡感,而D3是PhotoShopIllustrator;其它圖表庫就好比是各種app恃泪,而D3就好比是編程語言--實(shí)際上現(xiàn)在有許多js圖表庫或多或少都是用D3來“編程”實(shí)現(xiàn)的郑兴,C3就是其中一個(gè)。
如果D3是一支畫筆贝乎,那用它作畫的顏料是什么情连?D3是在瀏覽器這個(gè)畫板上作畫的,它的顏料自然就是HTML览效、SVG和CSS了却舀,當(dāng)然,現(xiàn)在Canvas也可以用來作畫了锤灿。與那些“模板”相比挽拔,D3最大的區(qū)別就在于你需要自己處理圖表具體怎么繪制,你要思考怎么把數(shù)據(jù)轉(zhuǎn)換成圖表需要的屬性但校,如寬高螃诅、位置、角度等等状囱。當(dāng)然州刽,D3也提供了很多工具和組件來實(shí)現(xiàn)這些需求。
最終你的畫作要傳達(dá)的意境浪箭,便是賦予了生命的數(shù)據(jù)穗椅。

如何用好這支畫筆

思路清晰是最重要的前提,固定的步驟可以幫助保持清晰的思路奶栖。我把使用D3開發(fā)圖表分為以下幾個(gè)步驟:

  • 明確圖表意義

    圖表形狀匹表、形式可能是由別人來設(shè)計(jì)的门坷,所以要首先明確圖表的意義,即它是如何表達(dá)數(shù)據(jù)的袍镀,或者說與數(shù)據(jù)之間的對應(yīng)關(guān)系是怎么樣的默蚌。

  • 確定圖表結(jié)構(gòu)及內(nèi)容

    即分析好使用什么元素來展現(xiàn)圖表,以及如何組裝這些元素苇羡。例如你選擇使用柱狀圖來表達(dá)數(shù)據(jù)绸吸,你首先要決定使用什么元素來繪制柱形,你可以選擇使用div元设江,也可以使用SVG的rect或path等锦茁,選擇的原則是“容易實(shí)現(xiàn)”。

  • 數(shù)據(jù)數(shù)量與圖表元素關(guān)聯(lián)

    使用圖表來表達(dá)數(shù)據(jù)的好處之一就是容易分辨數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系叉存,所以通常不會只有一條數(shù)據(jù)存在码俩。根據(jù)圖表的意義與圖表結(jié)構(gòu),使數(shù)據(jù)與圖表產(chǎn)生關(guān)聯(lián)歼捏。如果你選擇使用rect元素來繪制柱狀圖中的柱子稿存,那么每一條數(shù)據(jù)就關(guān)聯(lián)一個(gè)rect元素,即有多少條數(shù)據(jù)瞳秽,就應(yīng)當(dāng)有多個(gè)個(gè)柱子瓣履。

  • 數(shù)據(jù)值轉(zhuǎn)換成圖表元素所需的屬性值

    組成圖表的元素即是用來展現(xiàn)數(shù)據(jù)的數(shù)值信息的,根據(jù)圖表的意義將數(shù)據(jù)的值使用圖表元素來表現(xiàn)练俐。如柱狀圖中使用柱子的高低表現(xiàn)數(shù)值的大小袖迎,如果柱子是用rect元素繪制,那么它的高低便是用rect的屬性(height)控制的痰洒,這時(shí)就需要把數(shù)據(jù)的值轉(zhuǎn)換成rect的屬性值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浴韭,一起剝皮案震驚了整個(gè)濱河市丘喻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌念颈,老刑警劉巖泉粉,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異榴芳,居然都是意外死亡嗡靡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門窟感,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讨彼,“玉大人,你說我怎么就攤上這事柿祈」螅” “怎么了哩至?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蜜自。 經(jīng)常有香客問我菩貌,道長,這世上最難降的妖魔是什么重荠? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任箭阶,我火速辦了婚禮,結(jié)果婚禮上戈鲁,老公的妹妹穿的比我還像新娘仇参。我一直安慰自己,他們只是感情好荞彼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布冈敛。 她就那樣靜靜地躺著,像睡著了一般鸣皂。 火紅的嫁衣襯著肌膚如雪抓谴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天寞缝,我揣著相機(jī)與錄音癌压,去河邊找鬼。 笑死荆陆,一個(gè)胖子當(dāng)著我的面吹牛滩届,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播被啼,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼帜消,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浓体?” 一聲冷哼從身側(cè)響起泡挺,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎命浴,沒想到半個(gè)月后娄猫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡生闲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年媳溺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碍讯。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悬蔽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捉兴,到底是詐尸還是另有隱情屯阀,我是刑警寧澤缅帘,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站难衰,受9級特大地震影響钦无,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盖袭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一失暂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鳄虱,春花似錦弟塞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至倍踪,卻和暖如春系宫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背建车。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工扩借, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缤至。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓潮罪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親领斥。 傳聞我的和親對象是個(gè)殘疾皇子嫉到,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

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