html代码:

  1. <div id="id">
  2. <p>Apple</p>
  3. <p id="aa">Pear</p>
  4. <p>Banana</p>
  5. </div>
  6. <div>
  7. <p>a</p>
  8. <p>b</p>
  9. <p>c</p>
  10. </div>

页面效果:

1.选择元素和绑定数据

- 选择元素

(1) select(): 选择所有指定元素的第一个

  1. var div = d3.select('#id');
  2. var p = div.select("p");
  3. p.style("color","red")

页面效果:

(2) selectAll():选择所有指定元素的全部

  1. var div = d3.select('div');
  2. var p = div.selectAll("p");
  3. p.style("color","red")

页面效果:

- 绑定数据

(1) datum():绑定一个数据到选择集上

  1. var str = "China";
  2. var arr = ['a','b','c']
  3. var body = d3.select("body");
  4. var p = body.selectAll("p");
  5. p.datum(str);
  6. p.text(function(d,i){
  7. return "第" + i + "个元素绑定的数据是" + d;
  8. })

页面效果:

  上面的代码中,用到了一个无名函数function(d,i){},其中:

    ● d 代表数据,也就是与某元素绑定的数据。

    ● i 代表索引,代表数据的索引号,从 0 开始。

(2) data():绑定一个数组到选择集上,数组的各项值分别与选择集的各元素绑定

  1. var dataset = ["I like dog","I like cat","I like snake"];
  2. var body = d3.select("body");
  3. var p = body.selectAll("p");
  4. p.data(dataset).text(function(d,i){
  5. return d;
  6. })

页面效果:

2. 插入元素

(1) append():在选择集末尾插入元素

  1. var div = d3.select('#id');
  2. div.append("p").text("append p element");

页面效果:

(2) insert():在选择集前面插入元素

  1. var div = d3.select('#id');
  2. div.insert("p","#aa").text("insert p element");

页面效果:

3. 删除元素

remove():删除一个元素

  1. var div = d3.select("#id");
  2. var p = div.select("p")
  3. p.remove();

页面效果:

4. 一个简单的图表

  1. var width = 300; // 画布的宽度
  2. var height = 300; // 画布的高度
  3.  
  4. var svg = d3.select("body") // 选择文档中的body元素
  5. .append("svg") // 添加一个svg元素
  6. .attr("width",width) // 设定宽度
  7. .attr("height",height) // 设定高度
  8.  
  9. var dataset = [250, 210, 170, 130, 90] // 数据(表示矩形的宽度)
  10.  
  11. var rectHeight = 25; // 每个矩形所占的像素高度(包括空白)
  12.  
  13. //----------------------------------------------------------
  14. svg.selectAll("rect") // 选择svg内所有的矩形
  15. .data(dataset) // 绑定数组
  16. .enter() // 指定选择集的enter部分
  17. .append("rect") // 添加足够数量的矩形元素
  18. //----------------------------------------------------------
  19. // 这段代码要牢记,当有数据,而没有足够图形元素的时候,使用此方法可以添加足够的元素
  20.  
  21. .attr("x",20)
  22. .attr("y",function(d,i){
  23. return i * rectHeight;
  24. })
  25. .attr("width",function(d,i){
  26. return d;
  27. })
  28. .attr("height",rectHeight-2)
  29.  
  30. .attr("fill","#ccc"); // 设置颜色

页面效果:

5. 比例尺:将某一区域的值映射到另一区域,其大小关系不变

- 线性比例尺

  1. // 要求:将dataset中最小的值映射成0,最大的值映射成300
  2. var dataset = [1.2, 2.3, 0.9, 1.5, 3.3];
  3.  
  4. var min = d3.min(dataset);
  5. var max = d3.max(dataset);
  6.  
  7. var linear = d3.scale.linear().domain([min,max]).range([0,300]);
  8.  
  9. console.log(linear(0.9)); // 返回0
  10. console.log(linear(2.3)); // 返回175
  11. console.log(linear(3.3)); // 返回300

  d3.scale.linear() 返回一个线性比例尺。domain() 和 range() 分别设定比例尺的定义域和值域。d3.min()和d3.max()两个函数经常与比例尺一起出现。值得注意的是,d3.scale.linear() 的返回值,是可以当做函数来使用的。因此,才有这样的用法:linear(0.9)。

- 序数比例尺: 定义域和值域一一对应关系

  1. var index = [0, 1, 2, 3, 4];
  2. var color = ["red", "blur", "green", "yellow", "black"];
  3.  
  4. var ordinal = d3.scale.ordinal().domain(index).range(color);
  5.  
  6. console.log(ordinal(0)); // 返回red
  7. console.log(ordinal(2)); // 返回green
  8. console.log(ordinal(4)); // 返回black

- 给柱形图添加比例尺

  1. var width = 500; // 画布的宽度
  2. var height = 500; // 画布的高度
  3.  
  4. var svg = d3.select("body") // 选择文档中的body元素
  5. .append("svg") // 添加一个svg元素
  6. .attr("width",width) // 设定宽度
  7. .attr("height",height) // 设定高度
  8.  
  9. var dataset = [2.5, 2.1, 1.7, 1.3, 0.9];
  10.  
  11. var linear = d3.scale.linear().domain([0, d3.max(dataset)]).range([0, 200])
  12.  
  13. var rectHeight = 25;
  14.  
  15. svg.selectAll("rect")
  16. .data(dataset)
  17. .enter()
  18. .append("rect")
  19. .attr("x",20)
  20. .attr("y",function(d, i){
  21. return i * rectHeight;
  22. })
  23. .attr("width",function(d){
  24. return linear(d) // 这里添加比例尺
  25. })
  26. .attr("height",rectHeight-2)
  27. .attr("fill","#ccc")

修改值域 .range([0, 400]) 后:

柱形图改变。

D3.js的更多相关文章

  1. D3.js学习(七)

    上一节中我们学会了如何旋转x轴标签以及自定义标签内容,在这一节中,我们将接触动画(transition) 首先,我们要在页面上添加一个按钮,当我们点击这个按钮时,调用我们的动画.所以,我们还需要在原来 ...

  2. D3.js学习(一)

    从今天开始我将和大家一起学习D3.js(Data-Driven Documents),由于国内关于D3的学习资料少之又少,所以我觉得很有必要把自己学习过程记录下来,供同学们参考,如果文章有有哪些表达有 ...

  3. D3.js学习记录

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. D3.js部署node环境开发

    总结一段D3.js部署node环境的安装过程 准备阶段: 首先电脑上要安装node环境,这个阶段过滤掉,如果node环境都不会装,那就别玩基于node环境搞的其他东西了. 搭建环境: 我在自己的F:系 ...

  5. d3.js读书笔记-1

    d3.js入门 d3入门 D3是一个强大的数据可视化工具,它是基于Javascript库的,用于创建数据可视化图形.在生成可视化图形的过程中,需要以下几步: 把数据加载到浏览器的内存空间: 把数据绑定 ...

  6. 【 D3.js 进阶系列 — 6.1 】 缩放的应用(Zoom)

    缩放(Zoom)是另一种重要的可视化操作,主要是使用鼠标的滚轮进行. 1. zoom 的定义 缩放是由 d3.behavior.zoom() 定义的. var zoom = d3.behavior.z ...

  7. [资料搜集狂]D3.js数据可视化开发库

    偶然看到一个强大的D3.js,存档之. D3.js 是近年来十分流行的一个数据可视化开发库. 采用BSD协议 源码:https://github.com/mbostock/d3 官网:http://d ...

  8. D3.js 用层画条形图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 【 D3.js 入门系列 --- 3 】 做一个简单的图表!

    前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为 ...

  10. 【 D3.js 入门系列 --- 2.1 】 关于如何选择,插入,删除元素

    在D3.js中,选择元素的函数有两个:select 和 selectAll . 先说明一下它们的区别: select 是选择所有指定元素的第一个 selectAll 是选择指定元素的全部(以用于后面同 ...

随机推荐

  1. knockout笔记

    根据汤姆大叔博客总结-笔记: =============<script type="text/javascript"> $(function () { var View ...

  2. SpringMVC 异常处理

    SpringMVC学习系列(10) 之 异常处理 在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的.那么如何保证我们处理异常的代码 ...

  3. RikMigrations 或 Migrator.NET 进行自动化的数据库升级

    一种版本化的数据库脚本管理机制 现今开发的软件当中,多数系统的数据都是基于数据库存储的,但是由于软件变化的复杂性,相对于维护代码,数据库架构的版本并不是那么好维护. 这里本人针对实际情况,理想化出一种 ...

  4. Windows Serer 2003 配置手册 – 创建Active Dictionary域

    域与工作组的关系 实际上我们可以把域和工作组联系起来理解,在工作组上你一切的设置在本机上进行包括各种策略,用户登录也是登录在本机的,密码是放在本机的数据库来验证的.而如果你的计算机加入域的话,各种策略 ...

  5. cegui-0.8.2编译过程详解

    cegui 编译过程详解(cegui-0.8.2) cegui配置整了好长时间了,在一位大牛帮助下终于搞定了,网上的教程大多是老版本的,cegui-0.8.2版的配置寥寥无几,现在总结一下,献给正在纠 ...

  6. jQuery event的复制粘贴的坑

    jQuery为了兼容性会把系统暴露出来的event重新整理一遍,但是复制粘贴的event就被丢掉了. 所以要在所有原生浏览器想实现复制粘贴,大家都用flash实现了.其实只要用原生的方法捕获事件就ok ...

  7. DOM处理

    DOM处理 这几天整理了一下思路,本来觉得DOM部分会有很多东西,但是忽然发现频繁使用的其实并不太多 class class处理部分主要有四个 hasClass:检查元素是否包含某个class add ...

  8. CKeditor 集成 CKFinder

    之前照着网上的做,遇到了一些问题,经过多次实验修改最后算是成功了,下面进行详细讲解. 一.CKeditor的配置(附件中已有最新版CKeditor和CKFinder) 1.需要下载ckeditor, ...

  9. jQuery easyui刷新当前tabs

    更新特定的选项卡面板 可使用update方法,param参数包含2个属性: tab: 将被更新的选项卡. options: 选项卡相关配置项. Example: //当前tab var current ...

  10. json-smart 使用示例

    json-smart 使用示例 json是一种通用的数据格式.相比与protocal buffer.thrift等数据格式,json具有可读性强(文本).天生具备良好的扩展性(随意增减字段)等优良特点 ...