用 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");

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

转载自:http://blog.csdn.net/lzhlzz/article/details/32682047

d3 - bar chart的更多相关文章

  1. Bar Chart of Frequency of modals in different sections of the Brown Corpus

    Natural Language Processing with Python Chapter 4.8 colors = 'rgbcmyk' # red, green, blue, cyan, mag ...

  2. Highcharts - Bar Chart & Column Chart

    1. 条形图(Bar Chart)需要的数据格式类型如下: ["Luke Skywalker", "Darth Vader", "Yoda" ...

  3. [D3] Animate Chart Axis Transitions in D3 v4

    When the data being rendered by a chart changes, sometimes it necessitates a change to the scales an ...

  4. [D3] Create Chart Axes with D3 v4

    Most charts aren’t complete without axes to provide context and labeling for the graphical elements ...

  5. Matplotlib之Bar Chart

    Matplotlib之Bar Chart: import numpy as np import matplotlib.pyplot as plt data = [[300, 200, 250, 150 ...

  6. Relative-Frequency|frequency|pie chart |bar chart

    2.2Organizing Qualitative Data The number of times a particular distinct value occurs is called its ...

  7. bubble chart|Matrix Scatter|Overlay Scatter|Scatterplots|drop-line|box plot|Stem-and-leaf plot|Histogram|Bar chart|Pareto chart|Pie chart|doughnut chart|

    应用统计学 对类别数据要分类处理: Bar chart复式条形图便于对比: Pareto chart:对类别变量依据频数高低排列: Pie chart:饼图用于一个样本,可以区分类别数据 doughn ...

  8. 转 HighCharts笔记之: Bar Chart

    最近需要做一些Web图标,研究了几个开源的第三方工具后,最后决定使用HighCharts开发: Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是 ...

  9. matplotlib 柱状图 Bar Chart 样例及参数

    def bar_chart_generator():     l = [1,2,3,4,5]     h = [20, 14, 38, 27, 9]     w = [0.1, 0.2, 0.3, 0 ...

随机推荐

  1. JAVA基础之Set接口

    个人理解: Set接口是Collection接口的子类,其继承了所有方法,HashSet集合则实现了Set接口,其内部存储数据时依靠哈希表,一个类似数组和链表的结合体.设置空集合时,存在默认的容量和加 ...

  2. 深入理解 JavaScript Function

    1.Function Arguments JavaScript 函数的参数 类型可以是 复杂类型如  Object or Array 和简单类型 String Integer null undefin ...

  3. PHP利用lua实现Redis Sorted set的zPop操作

    function zPop($key) { $script = <<<EOD local v = redis.call('zrange', KEYS[1], 0, 0); if v[ ...

  4. 【POI】导出xls文件报错:The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook

    使用POI导出xls文件,由于数据过多,导致导出xls报错如下: The maximum number of cell styles was exceeded. You can define up t ...

  5. 算法之美--2.2 Array

    2016-12-02    00:24:12 利用抽象数据类型实现Array:主要用C++模板实现数组类:体会一个完整的C++类的写法,能顺利写出来的人不多了,特别是对复制构造函数和重载= []运算, ...

  6. 2017.2.7 开涛shiro教程-第六章-Realm及相关对象(二)

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第六章 Realm及相关对象(二) 1.Authenticatio ...

  7. 如何选择Haproxy和Nginx

    对于做软负载,我们都知道主流的方案有LVS.Haproxy.Nginx!那么对于Haproxy和Nginx,我们如何选择呢?回答这个问题之前,我根据个人使用经验来讲下它们的特点! Haproxy特点 ...

  8. Mockito使用指南

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52771493 本文出自: [HansChen的博客] mock和Mockito的关系 ...

  9. AngularJS中,<span class="bluetext" ng-bind="ctrl.user.name|uppercase"></span>和{{ctrl.user.name|uppercase}}是等价的,但不等于<span class="bluetext" ng-bind="ctrl.user.name|uppercase"/>

    代码下载:https://files.cnblogs.com/files/xiandedanteng/angularjsAttenSpan.rar AngularJS中,<span class= ...

  10. TCP/IP详解 卷一(第一章 概述)

    很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们相互进行通信. 1.分层 TCP/IP不是一个协议,而是一个协议族,通常它被认为是一个四层的协议系统,下面展 ...