前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图。

做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg 。

推荐用 SVG 来做各种图形。SVG 意为可缩放矢量图形(Scalable Vector Graphics),SVG 使用 XML 格式定义图像,不清楚什么是SVG的朋友请先在 w3cschools 学习下,内容很少,很快就能掌握,不需要记住各种标签,只要知道大概是什么就行,用的时候再查。

先看下面的代码:

  1. <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
  2. <script>
  3. var width = 600;
  4. var height = 600;
  5. var svg = d3.select("body").append("svg")
  6. .attr("width",width)
  7. .attr("height",height);
  8. var dataset = [ 30 , 20 , 45 , 12 , 21 ];
  9. svg.selectAll("rect")
  10. .data(dataset)
  11. .enter()
  12. .append("rect")
  13. .attr("x",10)
  14. .attr("y",function(d,i){
  15. return i * 30;
  16. })
  17. .attr("width",function(d,i){
  18. return d * 10;
  19. })
  20. .attr("height",28)
  21. .attr("fill","red");
  22. </script>
 

上面代码的结果如下图:

这样就做了一个柱形图。分析一下上面的代码:

第3-4行: 定义两个变量,分别表示 SVG 绘制领域的宽和高。

第5-7行: 表示选择 body 后,在 body 里插入 svg ,用 attr 来给 svg 添加属性。用 attr 添加属性的效果类似于在 HTML 中给<a>元素添加属性 href 。

第9行: 是要使用的数据。

第11行: 表示在 svg 中选择所有的 rect 元素,但是实际上这时候 svg 中还不存在 rect 元素。这是 D3 一个比较特殊的地方,即它能够选择一个空集。先不要惊讶,请看第13行。

第12行: 表示将数据绑定要这个 svg 上。

第13行: enter 表示当所需要的元素(这里为 rect )比绑定的数据集合的元素(这里为 dataset )少时,自动添加位置,使得与数据集合的数量一样多。这里很重要。

第14行: 紧接上一行, append 元素 rect 。11-14行经常一起出现,要注意。

第15-27行: 设定 rect 元素的各项属性,如位置,长短,颜色等。

上面的柱形图,对于每个柱柱都是手动设定的长度,实际运用中我们常常希望给定一个最大值,让柱柱自动根据这个最大值调整百分比,显示出来,怎么办呢?插入如下代码:

  1. var wx = d3.scale.linear()
  2. .domain([0,d3.max(dataset)])
  3. .range([0,500]);

d3.scale.linear() 用于生成一个线性的可缩放的尺度,它的初始 domain 为 [ 0 , 1 ] ,初始 range 为 [ 0 , 1 ] , 这里的[ ]表示的是范围。 现在我们把 domain 设定为 [ 0 , d3.max(dataset) ] ,即0到 dataset 中的最大值。 range设定为0到500。 这表示如果数据是45,则返回500,如果是30,则返回333.333。

接下来只要在添加 rect 时给width属性赋值的时候换成变量 wx 即可。

  1. svg.selectAll("rect")
  2. .data(dataset)
  3. .enter()
  4. .append("rect")
  5. .attr("x",10)
  6. .attr("y",function(d,i){
  7. return i * 30;
  8. })
  9. .attr("width",wx)           //注意这里
  10. .attr("height",28)
  11. .attr("fill","red");

这样,宽度会随着绑定的数据自动变化。

来自:

个人博客为: www.ourd3js.com   csdn博客为: blog.csdn.net/lzhlzz

转载请注明出处,谢谢。

【 D3.js 入门系列 --- 3 】 做一个简单的图表!的更多相关文章

  1. 【 D3.js 入门系列 --- 6 】 如何使移动图表

    我的个人博客是: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. [5.1]节中制作了一个比較完好的图表.但它是静态的.想做出它的动 ...

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

    D3 新专题首页 一转眼,这个入门系列已经积累了二十二篇文章之多,我想作为 D3.js 这款数据可视化工具的入门来说已经足够了.相信仅仅要看完本系列.以后全然能够在辅以查询的情况下完毕大部分可视化工作 ...

  3. Vue.js 入门:从零开始做一个极简 To-Do 应用

    Vue.js 入门:从零开始做一个极简 To-Do 应用 写作时间:2019-12-10版本信息:Vue.js 2.6.10官网文档:https://cn.vuejs.org/ 前言  学习 Vue ...

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

    图1. 柱形图 1. 柱形图 前几章的例子,都是对文字进行处理.本章中将用 D3 做一个简单的柱形图.制作柱形图有很多种方法,比如用 HTML 的 <div> 标签,或在 SVG 上绘制 ...

  5. 【 D3.js 入门系列 --- 5.1 】 做一个带坐标轴和标签的图表

    前面几节讲解了图标.坐标轴.比例等等,这一节整合这些内容做一个实用的图表.结果图如下: 代码如下所示: <html> <head> <meta charset=" ...

  6. 【 D3.js 入门系列 — 1 】 第一个程序 HelloWorld

    记得以前刚上大一学 C 语言的时候,写的第一个程序就是在控制台上输出 HelloWorld .当时很纳闷,为什么要输出这个.老师解释说所有学编程入门的第一个程序都是在屏幕上输出 HelloWorld, ...

  7. 【 D3.js 入门系列 --- 5 】 如何添加坐标轴

    第3节中做了一个图标,但没有为它添加一个相应的坐标轴,这样不知道每一个柱形到底有多长.这一节做一个坐标轴. D3中的坐标轴都是以 svg 图的形式出现的,这也是为什么在第3节中要使用 svg 的方法做 ...

  8. 【 D3.js 入门系列 --- 0 】 简介和安装

    D3的全称是(Data-Driven Documents),顾名思义可以知道是一个关于数据驱动的文档的javascript类库.如果你不知道什么是javascript,请先学习javascript的相 ...

  9. 【 D3.js 入门系列 --- 9.1 】 生产饼图

    我个人的博客: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处.谢谢. 这一节用 Layout 做一个饼状图.第9节中说过, Layout ...

随机推荐

  1. MultiProvider

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. centos 安装 mongdb

    1.安装MongoDB(安装到/usr/local) wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.2.4.t ...

  3. Java远程调试代码不一致问题汇总

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  4. C# 检测程序运行时间的方法,Stopwatch类

    //需要引用命名空间,System.Diagnostics Stopwatch watch = new Stopwatch(); //实例化一个计时器 watch.Start(); //开始计时 #r ...

  5. osg,qt编译的一些问题

    osg编译例子的时候,打开文件就出问题,可能是一些不兼容的问题 qt编译的是时候要添加qt和vs2010的整合工具,这样才能把 vs2010里面的QTDIR变量和环境变量QTDIR关联起来 同是右击文 ...

  6. 第八章 企业项目开发--分布式缓存memcached

    注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存 ...

  7. Windows Store App 文件选取器

    使用文件选取器可以访问除上面介绍的"应用程序存储"和"用户库"两个位置之外的本地文件或者文件夹.文件选取器是应用与系统进行交互的一个接口,通过文件选取器可以在应 ...

  8. BZOJ4046 [Cerc2014] Pork barre

    我们把边按权值从大到小依次加入图中 如果加到边权$V$,则当前的最小生成森林中边权$v\in[V, V']$(其中$V'$是任意值)形成的森林的边权和就是对于询问$[V, V']$的答案 由于点数不多 ...

  9. WCF初探-15:WCF操作协定

    前言: 在前面的文章中,我们定义服务协定时,在它的操作方法上都会加上OperationContract特性,此特性属于OperationContractAttribute 类,将OperationCo ...

  10. iOS开发网络篇—网络编程基础

    iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...