前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图。
做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg 。
推荐用 SVG 来做各种图形。SVG 意为可缩放矢量图形(Scalable Vector Graphics),SVG 使用 XML 格式定义图像,不清楚什么是SVG的朋友请先在 w3cschools 学习下,内容很少,很快就能掌握,不需要记住各种标签,只要知道大概是什么就行,用的时候再查。
先看下面的代码:
- <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
- <script>
- var width = 600;
- var height = 600;
- var svg = d3.select("body").append("svg")
- .attr("width",width)
- .attr("height",height);
- var dataset = [ 30 , 20 , 45 , 12 , 21 ];
- svg.selectAll("rect")
- .data(dataset)
- .enter()
- .append("rect")
- .attr("x",10)
- .attr("y",function(d,i){
- return i * 30;
- })
- .attr("width",function(d,i){
- return d * 10;
- })
- .attr("height",28)
- .attr("fill","red");
- </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 元素的各项属性,如位置,长短,颜色等。
上面的柱形图,对于每个柱柱都是手动设定的长度,实际运用中我们常常希望给定一个最大值,让柱柱自动根据这个最大值调整百分比,显示出来,怎么办呢?插入如下代码:
- var wx = d3.scale.linear()
- .domain([0,d3.max(dataset)])
- .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 即可。
- svg.selectAll("rect")
- .data(dataset)
- .enter()
- .append("rect")
- .attr("x",10)
- .attr("y",function(d,i){
- return i * 30;
- })
- .attr("width",wx) //注意这里
- .attr("height",28)
- .attr("fill","red");
这样,宽度会随着绑定的数据自动变化。
来自:
个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz
转载请注明出处,谢谢。
【 D3.js 入门系列 --- 3 】 做一个简单的图表!的更多相关文章
-
【 D3.js 入门系列 --- 6 】 如何使移动图表
我的个人博客是: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. [5.1]节中制作了一个比較完好的图表.但它是静态的.想做出它的动 ...
-
【 D3.js 入门系列 — 11 】 入门总结
D3 新专题首页 一转眼,这个入门系列已经积累了二十二篇文章之多,我想作为 D3.js 这款数据可视化工具的入门来说已经足够了.相信仅仅要看完本系列.以后全然能够在辅以查询的情况下完毕大部分可视化工作 ...
-
Vue.js 入门:从零开始做一个极简 To-Do 应用
Vue.js 入门:从零开始做一个极简 To-Do 应用 写作时间:2019-12-10版本信息:Vue.js 2.6.10官网文档:https://cn.vuejs.org/ 前言 学习 Vue ...
-
【 D3.js 入门系列 — 3 】 做一个简单的图表!
图1. 柱形图 1. 柱形图 前几章的例子,都是对文字进行处理.本章中将用 D3 做一个简单的柱形图.制作柱形图有很多种方法,比如用 HTML 的 <div> 标签,或在 SVG 上绘制 ...
-
【 D3.js 入门系列 --- 5.1 】 做一个带坐标轴和标签的图表
前面几节讲解了图标.坐标轴.比例等等,这一节整合这些内容做一个实用的图表.结果图如下: 代码如下所示: <html> <head> <meta charset=" ...
-
【 D3.js 入门系列 — 1 】 第一个程序 HelloWorld
记得以前刚上大一学 C 语言的时候,写的第一个程序就是在控制台上输出 HelloWorld .当时很纳闷,为什么要输出这个.老师解释说所有学编程入门的第一个程序都是在屏幕上输出 HelloWorld, ...
-
【 D3.js 入门系列 --- 5 】 如何添加坐标轴
第3节中做了一个图标,但没有为它添加一个相应的坐标轴,这样不知道每一个柱形到底有多长.这一节做一个坐标轴. D3中的坐标轴都是以 svg 图的形式出现的,这也是为什么在第3节中要使用 svg 的方法做 ...
-
【 D3.js 入门系列 --- 0 】 简介和安装
D3的全称是(Data-Driven Documents),顾名思义可以知道是一个关于数据驱动的文档的javascript类库.如果你不知道什么是javascript,请先学习javascript的相 ...
-
【 D3.js 入门系列 --- 9.1 】 生产饼图
我个人的博客: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处.谢谢. 这一节用 Layout 做一个饼状图.第9节中说过, Layout ...
随机推荐
-
Linux Shell 流程控制语句
* 本文主要介绍一些Linux Shell 常用的流程控制语句* 1. if 条件语句:if-then/if-elif-fi/if- else-fi if [条件判断逻辑1];then command ...
-
linux命令详解:md5sum命令
前言 在网络传输.设备之间转存.复制大文件等时,可能会出现传输前后数据不一致的情况.这种情况在网络这种相对更不稳定的环境中,容易出现.那么校验文件的完整性,也是势在必行的. 使用说明 md5sum命令 ...
-
linux解压/压缩文件
1.*.tar 用 tar –xvf 解压 2.*.gz 用 gzip -d或者gunzip 解压 3.*.tar.gz和*.tgz 用 tar –xzf 解压 4.*.bz2 用 bzip2 ...
-
软件工程day7
参与组内讨论,关于新功能“吐槽墙”的UI设计,小组决定使用TabControl控件实施. 于周末几天自己使用PS学习临摹了一些程序的icon,完成度不高. 鉴于正在参与开发的软件为“工具性”+“微社交 ...
-
将Web应用性能提高十倍的10条建议
导读 提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于 ...
-
AutoHotKey使用:空格键坏了怎么办?
;RCtrl:: RAlt:: Send, {space} Return http://ahkscript.org/ https://autohotkey.com/download/
-
常见的MIME类型
超文本标记语言文本 .htm,.html text/html 普通文本 .txt text/plain GIF图形 .gif image/gif JPEG图形 .ipeg,.jpg image/jpe ...
-
libvirt里的面向对象的C语言
C语言:类的声明和定义 // 通用父类的定义 struct _virClass { virClassPtr parent; unsigned int magic; char *name; size_t ...
-
【神经网络篇】--基于数据集cifa10的经典模型实例
一.前述 本文分享一篇基于数据集cifa10的经典模型架构和代码. 二.代码 import tensorflow as tf import numpy as np import math import ...
-
docker 删除镜像
有时候我们不需要某个镜像,需要对它进行删除.1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有cont ...