d3.js快速入門

D3快速入門

Data Driven Documents

簡(jiǎn)介

圖表的繪制

在web下驾锰,支持繪圖的有svg和canvas。
百度的echarts是使用canvas宣吱,阿里的AntV的底層繪圖G是支持svg和canvas(ps:G4.0正在準(zhǔn)備支持webgl陡鹃,這樣的話可以使用顯卡增強(qiáng)繪制)。
今天的主角d3js是支持同時(shí)svg和canvas的疚脐。

svg與canvas

svg是及其形狀都是標(biāo)簽形式的,就像提供了很多各種形狀邢疙,你選擇圖形給上貼棍弄。而且每個(gè)形狀都支持事件以及屬性望薄。
canvas是給你一個(gè)畫板,給你一個(gè)筆呼畸,調(diào)api繪制來繪制圖形痕支。
svg可以很輕松的捕捉鼠標(biāo)事件,比如鼠標(biāo)移入到矩形等等蛮原。也可以直接操作某個(gè)形狀的屬性卧须。
canvas只能先捕獲事件,然后定位儒陨,計(jì)算是否在某個(gè)形狀上花嘶。繪制大數(shù)據(jù)量時(shí),性能比較好框全。

d3和echarts

echart是配置式的察绷,需要按照文檔進(jìn)行配置即可。
d3是需要通過調(diào)用api津辩,先處理數(shù)據(jù)轉(zhuǎn)換。繪制容劳,加入交互喘沿。

所以目前推薦在常規(guī)交互下的圖表使用echarts,定制度較高或者重交互的圖表可以使用d3js使用svg繪制竭贩。

關(guān)于文檔

強(qiáng)烈建議速讀一遍api文檔蚜印,通過文檔以及例子,就能很快了解實(shí)現(xiàn)某種圖需要哪些api

詳細(xì)文檔請(qǐng)參考:
中文文檔
英文文檔

先來演示一版

本文就以餅圖舉例留量,echarts餅圖截圖:


image.png

寫代碼之前

假如需要實(shí)現(xiàn)這個(gè)餅圖窄赋。我們可以拆解圖表:
在上面我們看到:有標(biāo)題,圖例楼熄,餅圖上有:扇形忆绰,文字,還有浮動(dòng)框可岂,鼠標(biāo)hover扇形是有變大效果错敢,如果如果數(shù)據(jù)發(fā)生變化,我們需要更新缕粹。

第一步 繪制基礎(chǔ)結(jié)構(gòu)及初始化相關(guān)參數(shù)

首先是將圖表重與數(shù)據(jù)無關(guān)的dom結(jié)構(gòu)繪制出來稚茅,比如:標(biāo)題,圖例平斩,以及定位亚享。
其次我們需要初始化繪制需要的相關(guān)對(duì)象。比如:d3.pies用于布局計(jì)算绘面,d3.arc用于繪制扇形欺税,以及tips糜芳。


image.png

第二步 更新圖表加入更新動(dòng)畫

首先由于數(shù)據(jù)量會(huì)變,所以我們需要每次更新dom魄衅,將多余的dom刪除峭竣,缺少的dom天加上,保證dom和數(shù)量一致晃虫。
數(shù)據(jù)值的更新皆撩,調(diào)用繪圖,重新繪制扇形哲银。


image.png

第三部 加入交互

首先是餅圖中扇形區(qū)域鼠標(biāo)移入移出的交互扛吞,
其次是圖例中矩形點(diǎn)擊隱藏/顯示該數(shù)據(jù)。


image.png
image.png

這是我們實(shí)現(xiàn)的效果荆责。


image.png

在線demo

總結(jié)通用架子

通過這個(gè)例子滥比,我們可以看到,d3js做圖表比較麻煩做院,所有的內(nèi)容基本需要自己調(diào)用api繪制盲泛,正是這樣可控性高,可以很輕松的實(shí)現(xiàn)各種圖表定制键耕。

d3實(shí)現(xiàn)一個(gè)交互圖表寺滚。我們其實(shí)都是需要這三步:
第一步,初始化屈雄,與數(shù)據(jù)發(fā)生變化無關(guān)的相關(guān)參數(shù)村视,dom及對(duì)象
第二步,繪制函數(shù)酒奶,將數(shù)據(jù)進(jìn)行綁定蚁孔,繪制出與數(shù)據(jù)相關(guān)的形狀及對(duì)象。
第三步惋嚎,加入交互杠氢,各種交互事件,定時(shí)更新等等瘸彤。

常見圖表的繪制

柱狀圖修然,折線,散點(diǎn)圖:直接使用比例尺质况,即可換算位置和大小愕宋。
d3-chord:制作玄圖
d3.pie:制作餅圖,環(huán)圖结榄,儀表盤
d3-geo:制作地圖
d3-force:力導(dǎo)圖
d3-hierarchy:樹圖中贝,樹矩形圖,包等等
d3.histogram:直方圖
交互類:
d3-zoom:實(shí)現(xiàn)縮放
d3-drag:實(shí)現(xiàn)拖動(dòng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末臼朗,一起剝皮案震驚了整個(gè)濱河市邻寿,隨后出現(xiàn)的幾起案子蝎土,更是在濱河造成了極大的恐慌,老刑警劉巖绣否,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誊涯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蒜撮,警方通過查閱死者的電腦和手機(jī)暴构,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來段磨,“玉大人取逾,你說我怎么就攤上這事∑恢В” “怎么了砾隅?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)债蜜。 經(jīng)常有香客問我晴埂,道長(zhǎng),這世上最難降的妖魔是什么策幼? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任邑时,我火速辦了婚禮,結(jié)果婚禮上特姐,老公的妹妹穿的比我還像新娘。我一直安慰自己黍氮,他們只是感情好唐含,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沫浆,像睡著了一般捷枯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上专执,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天淮捆,我揣著相機(jī)與錄音,去河邊找鬼本股。 笑死攀痊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拄显。 我是一名探鬼主播苟径,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼躬审!你這毒婦竟也來了棘街?” 一聲冷哼從身側(cè)響起蟆盐,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遭殉,沒想到半個(gè)月后石挂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡险污,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年痹愚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罗心。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡里伯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渤闷,到底是詐尸還是另有隱情疾瓮,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布飒箭,位于F島的核電站狼电,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弦蹂。R本人自食惡果不足惜肩碟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凸椿。 院中可真熱鬧削祈,春花似錦、人聲如沸脑漫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽优幸。三九已至吨拍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間网杆,已是汗流浹背羹饰。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碳却,地道東北人队秩。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像追城,于是被迫代替她去往敵國(guó)和親刹碾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 最近遇到線條處理的問題,所以將之前使用過的Canvas,SVG(從實(shí)現(xiàn)畫線的角度進(jìn)行出發(fā)),進(jìn)行總結(jié);順便將ECh...
    閆小兀閱讀 1,556評(píng)論 1 9
  • 現(xiàn)在在大數(shù)據(jù)的帶領(lǐng)下座柱,數(shù)據(jù)可視化越來越突出迷帜,能夠清楚的分析出自己想要的數(shù)據(jù)物舒,這也是我們現(xiàn)在最求的數(shù)據(jù)可視化方法,那...
    UIleader閱讀 1,267評(píng)論 0 2
  • 一戏锹、簡(jiǎn)介 1. D3是什么冠胯? D3(或D3.js) 是一個(gè)用來使用Web標(biāo)準(zhǔn)做數(shù)據(jù)可視化的JavaScript庫。...
    朝朝_c53e閱讀 822評(píng)論 0 2
  • javascript功能插件大集合锦针,寫前端的親們記得收藏 包管理器管理著 javascript 庫荠察,并提供讀取和打...
    狗狗嗖閱讀 781評(píng)論 0 1
  • Data Visualization with D3 D3: SVG中的jQurey 1. Add Documen...
    王策北閱讀 755評(píng)論 0 2