[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 学习下,内容很少,很快就能掌握,不需要记住各种标签,只要知道大概是什么就行,用的时候再查。

先看下面的代码:

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

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

[3] 用D3.js做一个简单的图表吧!,布布扣,bubuko.com

时间: 2024-10-26 02:59:55

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

D3.js 做一个简单的图表!

柱形图是一种最简单的可视化图标,主要有矩形.文字标签.坐标轴组成.本文为简单起见,只绘制矩形的部分,用以讲解如何使用 D3 在 SVG 画布中绘图. 一. 画布是什么 前几章的处理对象都是 HTML 的文字,没有涉及图形的制作. 要绘图,首要需要的是一块绘图的“画布”. HTML 5 提供两种强有力的“画布”:SVG 和 Canvas. 1.1. SVG 是什么 SVG,指可缩放矢量图形(Scalable Vector Graphics),是用于描述二维矢量图形的一种图形格式,是由万维网联盟制定

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

图1. 柱形图 1. 柱形图 前几章的例子,都是对文字进行处理.本章中将用 D3 做一个简单的柱形图.制作柱形图有很多种方法,比如用 HTML 的 <div> 标签,或在 SVG 上绘制 . SVG ,即可缩放矢量图形(Scalable Vector Graphics),使用 XML 格式定义图形,可在 W3School 学习 SVG 的相关语法,不需要记住所有标签,用的时候再查即可. 先看下面的代码: <script src="http://d3js.org/d3.v3.mi

用JS做一个简单的电商产品放大镜功能

使用js制作一个简单的产品放大图 购物网站的产品页经常会放有一个产品展示图区.该图区有一个功能就是产品图的放大功能,移动左侧的焦点区域,可以放大细节部分观看,详情如下图.实现该功能的方法也非常简单. 实验:制作产品焦点放大图. 所需技能:1.基本的获取页面元素的方法: 2.几个简单的事件: 3.会使用dom设置元素的属性: 案例原理:1.焦点框的跟随鼠标事件: 2.焦点框的移动区域规定: 3.大盒子内容的显示: 适合对象:js初学者 -------------------------------

原生js做一个简单的进度条

用原生js做进度条,布局非常简单,一个盒子里放一个span标签,让它的宽度为0,并且转成块元素. 主要用定时器动态增加span的宽度,并且当它的宽度大于父级盒子的宽度的时候停止 效果如下: 一 css如下: *{ margin: 0; padding: 0; } #box{ width: 500px; height: 30px; margin: 50px auto; overflow: hidden; border: 1px solid #CCCCCC; border-radius: 15px;

css3加js做一个简单的3D行星运转效果

前几天在园子里看到一篇关于CSS3D行星运转的文章,原文在这里,感觉这个效果也太酷炫了,于是自己也就心血来潮的来尝试的做了一下.因为懒得去用什么插件了,于是就原生的JS写,效果有点粗超,还有一些地方处理的不是很好,如果有好的建议万望留言告知,不胜感谢.源代码已上传到github上,点这里获取.好了不说废话了,下面附上代码. HTML部分 <div class="path-Saturn"> <div id="Saturn" title="土

用js做一个简单的留言板效果

html部分: 1: <!DOCTYPE> 2: <html lang="zh-en"> 3: <head> 4: <title>js实现简单留言板</title> 5: <meta http-equiv="content-type" content="text/html;charset=utf-8"> 6: <link rel="stylesheet&quo

JS做一个四则运算计算器

用JS做一个简单的网页计算器如上图所示,只进行简单的加减乘除运算 <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>计数器</title></head><body>    <input type="text" name="text"

分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业不是百度来的,我只是百度了一些示例代码的意思,怎么用!算了,越解释万一越黑呢!哈哈O(∩_∩)O哈哈~) ----------------------------------------------------------------分界线------------------------------

使用React并做一个简单的to-do-list

1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其visual-dom的这种技术创新,也算是早就有了初步了解.一来没有学的太深入,二来后来在工作中和业余项目中都没有用到,因此慢慢的就更加生疏了. 近期,因为我想把自己的开源项目wangEditor能放在React.angular和vuejs中使用.先从react开始,顺手自己也重试一下React的基础知识,顺便再做一个小d