D3究竟是什么?

学习D3并不容易,需要比较多的基础知识,像JS、HTML、SVG等都必需要掌握的,同时还需要有不错的逻辑思考能力。但如果你能知道D3的原理,从本质上理解D3究竟是什么,那么无论是学习还是使用D3都会更加轻松容易。

D3.js

那么D3究竟是什么呢?初学者及使用不深的开发人员可能不容易理解它,只知道可以用它开发图表。
从字面上讲D3是Data-Driven Documents的缩写,即数据驱动文本,这里说的文本是web页面的DOM元素。官方的解释为 D3是一个可基于数据操作文本的js库,它可以帮助你使用HTML、SVG和CSS让数据鲜活起来,并且提供了很多可视化组件,以及数据驱动管理DOM的方法
单纯从上面的描述中是很难真正理解D3的本质的,下面我们就几个方面好好的说一下D3究竟是什么。

D3.js不是什么

或许要解答一个东西是什么,先从反面说一下它不是什么会更容易些。D3.js的目的是使用图表展示数据,而这方面的js库也非常多,最有名的可能就是百度的ECharts,并且它们也的确都非常优秀,使用也更加简单。如果你要使用这些js图表库,只要选择你想要的图表类型,然后按照它的格式要求给它数据就可以了,相反D3却要麻烦很多。
那么为什么还要选择D3呢?因为,D3与它们并不是同一类产品,D3是相对更加底层的JS库。
ECharts等图表库就好比是一个模板,你只要选择喜欢的模板,然后往里填充自己的东西即可。可模板毕竟是模板,不够灵活,如果它们能满足你的需求那是最简单的,直接用就可以,但如果模板无法满足你的需求时你要怎么办?或许你会想,自己修改需要修改的地方就可以了。可这真的没有那么简单。它们并不像PPT、Word的模板那样,套用后每页都可以轻松修改内容,处处都是看得见,摸得着,想怎么改都行。但图表库这些东西,你要想修改它的样子,你就必须要明白它是怎么实现的:它实现图表的技术是什么,结构是怎么样的,代码在哪里写的,逻辑是怎么样的,怎么样修改才不会造成各种影响……到最后如果能修改还好,但如果发现根据就无法修改,那可就真是头都大了。

D3.js是一支画笔

与模板相对而言,D3更像是一支画笔,你可以得到任何你想要的图形图表。与画家画画一样,只要你的基本功过关,就可以随心所欲画出你想要的东西。当然,使用画笔作画比向给定的轮廓(模板)里填充颜色要困难多了,因为每一个线条、每一处阴影等等任何东西都需要你自己考虑怎么绘制。所以在你选择学习D3之前,要先想明白你要的究竟是什么。
为了更好的理解,我们还可以说其它图表库是美图秀秀,而D3是PhotoShopIllustrator;其它图表库就好比是各种app,而D3就好比是编程语言--实际上现在有许多js图表库或多或少都是用D3来“编程”实现的,C3就是其中一个。
如果D3是一支画笔,那用它作画的颜料是什么?D3是在浏览器这个画板上作画的,它的颜料自然就是HTML、SVG和CSS了,当然,现在Canvas也可以用来作画了。与那些“模板”相比,D3最大的区别就在于你需要自己处理图表具体怎么绘制,你要思考怎么把数据转换成图表需要的属性,如宽高、位置、角度等等。当然,D3也提供了很多工具和组件来实现这些需求。
最终你的画作要传达的意境,便是赋予了生命的数据

如何用好这支画笔

思路清晰是最重要的前提,固定的步骤可以帮助保持清晰的思路。我把使用D3开发图表分为以下几个步骤:

  • 明确图表意义

    图表形状、形式可能是由别人来设计的,所以要首先明确图表的意义,即它是如何表达数据的,或者说与数据之间的对应关系是怎么样的。

  • 确定图表结构及内容

    即分析好使用什么元素来展现图表,以及如何组装这些元素。例如你选择使用柱状图来表达数据,你首先要决定使用什么元素来绘制柱形,你可以选择使用div元,也可以使用SVG的rect或path等,选择的原则是“容易实现”。

  • 数据数量与图表元素关联

    使用图表来表达数据的好处之一就是容易分辨数据与数据之间的关系,所以通常不会只有一条数据存在。根据图表的意义与图表结构,使数据与图表产生关联。如果你选择使用rect元素来绘制柱状图中的柱子,那么每一条数据就关联一个rect元素,即有多少条数据,就应当有多个个柱子。

  • 数据值转换成图表元素所需的属性值

    组成图表的元素即是用来展现数据的数值信息的,根据图表的意义将数据的值使用图表元素来表现。如柱状图中使用柱子的高低表现数值的大小,如果柱子是用rect元素绘制,那么它的高低便是用rect的属性(height)控制的,这时就需要把数据的值转换成rect的属性值。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容