D3.js 的基本用法外加一个略调皮的demo

前几天看到社区里有人发帖子比较了三个比较主流的图表插件,大家都对heightCharts情有独钟,不过无奈无良主管个人爱好D3多一些,所以我的图表第一次就这么给了D3···

这是我用D3+react做的一个图表,不过由于扩展性不是很好,就不贴源码了。

http://yansm.github.io/react-d3-test/

D3的学习曲线确实有些不好,关键是api给的乱七八糟,还不如看demo来的明白,也让人产生了退却感。

其实D3不算是一个图表插件,他更像是操作svg的“jquery”,所以他采用了svg得坐标系还有思想也让写东西的时候很不好掌握。

我们下面做一个简单的例子,来说明一下他的一些主要的api。

一个图表坐标轴是最常见的部分,可惜D3最恶心的地方却也是坐标轴。

首先一个坐标轴需要由一个刻度尺组成,这个刻度尺也是你再作内容时候定位所需要的,这个刻度尺以你所传输的数据来确定。所以你的坐标轴和你的图表内容其实都是基于这个刻度尺来决定的。

而一个刻度尺有两项数据来建立,一个是数据的范围以及你的空间范围,你的数据范围就是你的x轴数据的最大值到最小值,空间范围就是你图表的大小,比如你的宽度是600,那么你的空间范围就是 0-600,

而数据范围有两种办法去决定,一个是d3自带的extents方法,你只要把数组给他就ok了他会给你最大值或这最小值,但是假如你的最小值有别的需求比如说需要他时0,那么就用D3.max或者d3.min即可,同样的给他数组,他会给你最大值或者最小值。

  1. var yExtents = [0, d3.max( data_1.map(function (e) {
  2. return yAccessor(e);
  3. }))]

类似这样即可。

同样的你的scale也可以生成了。

  1. var yScale = d3.scale.linear()
  2. .domain(yExtents)
  3. .range([400,0]);

坐标轴这里分为orgin,linear还有time这三种,叫常用的是后两种。后两种都是需要domain和range两个参数即可。

而你有了刻度尺,就可以去实现坐标轴了。

  1. var yAxis = d3.svg.axis()
  2. .scale(yScale)
  3. .orient(‘left‘);

坐标轴也是两个属性,一个是你的刻度尺,一个是方向,top,bottom,left,right这四种。

刻度尺也还有别的,比如颜色的等。同样的给出两个范围即可用作数值的输出了。

之后我们以柱状图为例,讲一下图表的构成。

柱状图来说,每个柱都是一个svg的rect,你需要给他5个属性,x,y,width,height,fill。

在构成的时候你需要

先选择所有的rect

  1. barSvg
  2. .selectAll(‘rect‘)

然后插入数据

.data(data)

这时候当数据生成了新的rect,那么就要

  1. .enter().append(‘rect‘)

获取到新数据然后生成相应的rect。而对于多余的rect,可以使用exit()来操作。

宽度你需要根据数据的数量来定,你也可以用他给出的方式来作,这个他给的算宽的方式我忘记了,api太乱没找到···

  1. .attr(‘width‘, 750/length/2)
  2. ..attr(‘height‘, function(d) {
  3. return 400 - yScale(yAccessor(d));
  4. })

你每次的attr都可以放入常量或者是function, 这个时候就用到了刻度尺,你给你的刻度尺一个y轴数值的参数,他返还给你一个相应的长度。

同样的x和y坐标也可以这样计算得到

  1. .attr(‘x‘,function (d) {
  2. return xScale(xAccessor(d));
  3. })
  4. .attr(‘y‘, function (d){
  5. return yScale(yAccessor(d));
  6. })

如果你像增加动画,只需要加transition()和duration()以及delay来进行。

d3支持链式操作,甚至比jquery还要强大,你可以吧动画存储到你的链式里,然后在后续的操作中在增加形变。

一个简单地图表大致就是这样的,下面有一个教程大家可以进一步的熟悉一下。

其实d3没有那么难,你只要掌握了主要的方法就可以驾驭他,也许最让人心酸的是你以为找到的是一个给出数据就可以返回结果的插件,然而他给你的知识一个由你添加功能的框架···

代码在线运行及把玩地址:http://www.gbtags.com/gb/rtreplayerpreview/1095.htm

原文链接:http://www.gbtags.com/gb/share/5729.htm

时间: 2024-10-23 13:03:20

D3.js 的基本用法外加一个略调皮的demo的相关文章

做一个略调皮的个人主页--结构篇

目录 做一个略调皮的个人主页--菜单篇 做一个略调皮的个人主页--结构篇 首先感谢大家这么给面子,看到评论我也特别的开心. 不过要实现声明一下,之前忘记说了,这个设计的灵感来自于某设计公司给某银行做的办理系统的一张宣传图,当初看到的时候就特别的喜欢,就拿来做为自己的个人主页啦,大家看到的第一眼就是那张宣传图,之后的动态效果以及别的页面就都是自己的东西啦. 我的个人主页 上一篇:做一个略调皮的个人主页--菜单篇 源码是挂在git上的,大家可以随便下. 源码 如果有git的,记得给星哦~~~~~~

做一个略调皮的个人主页--游戏篇

最近严重加班,非常严重··· 万恶的discuz啊,还有万恶的环境问题,死了算了. 这个应该是这个系列最后一篇啦,之后我会做另一个想法.主要是用来查看文章的一个主页,期间发些自己觉得好玩的东西出来. 这一篇主要介绍一下我做的一个flappy bird.由于是自己js手写的,效率肯定不高,就当拿来玩的罢.浏览器不好回很卡哦. 效果演示在这里: flappy bird 首先闭一个包,在里面写个向外接口: ..... 然后分步骤去实现这个东西. 第一步,是解决自由落体,这个我们借用一下google在某

做一个略调皮的个人主页--菜单篇

目录 做一个略调皮的个人主页--菜单篇 做一个略调皮的个人主页--结构篇 由于要重新找工作,所以做了一个自己的个人主页,觉得还好,所以分享出来,也算是自己的一些记录. 具体演示可以查看我的个人主页. 大体都是一些css3的应用,干货实在很少,做来玩乐罢了. 第一次写这方面的文章,行散神也散,望海涵. 首先,先列出less文件的公共部分以及常量. 公共类: ... 原文来自:做一个略调皮的个人主页--菜单篇

[3] 用D3.js做一个简单的图表吧!

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为可缩放矢量图形(Scalable Vector Graphics),SVG 使用 XML 格式定义图像,不清楚什么是SVG的朋友请先在 w3cschools 学习下

【 D3.js 入门系列 — 11 】 入门总结

D3 新专题首页 一转眼,这个入门系列已经积累了二十二篇文章之多,我想作为 D3.js 这款数据可视化工具的入门来说已经足够了.相信仅仅要看完本系列.以后全然能够在辅以查询的情况下完毕大部分可视化工作. D3.js 最早的 v1.0 版本号是由 Michael Bostock 于2011年2月18日公布,其后经过多人的不断完好,眼下最新的版本号为 v3.4.11.从公布至今三年多的时间里,D3.js 在国外不断有人尝试并制作教程.成为了流行的数据可视化工具.可是眼下在国内能查询到中文资料还比較少

【 D3.js 入门系列 --- 7 】 理解 update, enter, exit 的使用

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 在前面几节中反复出现了如下代码: svg.selectAll("rect") .data(dataset) .enter() .append("rect") 当所选择的 rect 数量比绑定的数据 dataset 的数量少的时候,通常会用到以上代码,这一节就详细说说当被选择元素和数据数量不一致时该如何处理. 这一节将涉及到三个函数.

【 D3.js 入门系列 --- 10 】 地图的绘制

本人的个人博客为:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 地图的制作在 D3 中可以说是最重要的一环.因为在进行数据可视化时,很多情况都会和地图联系在一起,如中国各省的人口多少,GDP多少等,都可以和地图联系在一起. D3 中制作地图所需要的文件问 JSON 文件.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.关于 JSON 的语法格式,可以在: http://www.w3s

[4] D3.js中使用scale(比例)

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 在上一节中使用了一个很重要的概念 - scale (这个不知道翻译成什么,暂且叫它比例).本节将重点介绍它的相关使用方法. 在介绍 scale 之前,先介绍两个经常和 scale 一起出现的函数,在上一节中也出现了. d3.max() d3.min() 它们用于求一个数组中的最大值和最小值,如果是一维数组,使用方法如下: var dataset = [ 30,

D3.js总体展示篇

最近一段时间研究社会成员网络关系图的一些可视化展示,对大数据可视化这篇荒漠一筹莫展的自己,幸好发现了D3这片充满活力的绿洲,我决定在这块宝地贪婪地大餐一番. 本文介绍主要来自官网翻译及用户使用后感想资料收集 D3.js是一个对数据(主要针对大数据)进行操纵使之实现可视化的JavaScript库. D3能够借助HTML.SVG和CSS等技术将数据展示出来.通俗点,就是网页制图,生成互动图. 介绍D3的中文书籍现在 只有 <数据可视化实战-使用D3设计交互式图表>,有兴趣大家可以看看 优点: 与其