我个人的博客: www.ourd3js.com

csdn博客为: blog.csdn.net/lzhlzz

转载请注明出处。谢谢。


这一节用 Layout 做一个饼状图。第9节中说过, Layout 的作用仅仅是转换数据,将不适合图形化的数据转化成适合图形化的数据。如今使用下面数据:

var dataset = [ 30 , 10 , 43 , 55 , 13 ];

这个数据要不能直接用于画饼状图,我们必须通过计算将它转换成角度。这个计算不须要我们手动计算。由于 D3 中提供了 d3.layout.pie() 函数。这个 Layout 就是用于将上面这种数据转换成饼状图须要的角度。以下定义一个这种函数。

var pie = d3.layout.pie();

一定要记住,这是一个函数,使用它的时候。要 pie( dataset ) 这样才转换数据。我们能够先看看转换后输出什么样的数据。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHpobHp6/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

如上图所看到的,5个整数被转换成了5个 Object ,每一个里面存有起始角度和结束角度,以及原整数。

这种数据适合做饼状图。这就是 Layout 的作用。可是要注意。实际作图时,还是须要别的作图方法的。

我们可用做弧线的方法来作饼状图,由于弧线有粗细,调整粗细就能变成饼状图,以下我们加入例如以下代码:

var outerRadius = width / 2;
var innerRadius = width / 4;
var arc = d3.svg.arc()
.innerRadius(innerRadius)
.outerRadius(outerRadius);

outerRadius 和 innerRadius 是弧线的外半径和内半径,width 是 svg 绘制框的宽度, outerRadius - innerRadius 就是弧线的粗细。

然后我们定义一个弧线的函数 arc ,并把内外半径传给它。要注意 arc 也是一个函数。

    接下来能够作图了,和前几节一样,都是在 svg 框内作图。上面的有5个整数,也就是有5段弧线。我们先在 svg 里加入5个分组( 也就是 svg 中的元素 g )。每个分组就是一段弧线。代码例如以下:

		var arcs = svg.selectAll("g")
.data(pie(dataset))
.enter()
.append("g")
.attr("transform","translate("+outerRadius+","+outerRadius+")");

上面的代码中,我们绑定了转换后的数据 pie(dataset) 。有5个数据。所以会加入5个g元素。最后一行代码是移动元素的位置,默认的起始位置是 svg 绘制框的 (0,0) 坐标,也就是左上角。要注意,这个时候上面代码返回的是同一时候选择5个g元素的选择。

接下来对每一个g元素,加入 path 。

		arcs.append("path")
.attr("fill",function(d,i){
return color(i);
})
.attr("d",function(d){
return arc(d);
});

由于 arcs 是同一时候选择5个g元素的,所以 append("pah") 后,是每个 g 中都有 path 。然后再加入颜色属性,和路径属性。

颜色属性的 color(i) 是定义的一个函数。

		var color = d3.scale.category10();

SVG 中的路径属性是 d, 它的值是 arc(d) 。也就是将绑定的数据作为上面定义的函数 arc 的參数算出的值。

接下来在每个弧线中心加入文本。

		arcs.append("text")
.attr("transform",function(d){
return "translate(" + arc.centroid(d) + ")";
})
.attr("text-anchor","middle")
.text(function(d){
return d.value;
});

arc.centroid(d) 能算出弧线的中心,要注意一句代码。返回的是 d.value ,而不是 d。由于当前绑定的数据是 Object。里面有起始角度等值,d.value 是元整数的值。可见上面的截图。

好了,看看结果图吧。

完整代码例如以下:

<html>
<head>
<meta charset="utf-8">
<title>Pie</title>
</head> <style> </style>
<body>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script> var width = 600;
var height = 600;
var dataset = [ 30 , 10 , 43 , 55 , 13 ]; var svg = d3.select("body").append("svg")
.attr("width",width)
.attr("height",height); var pie = d3.layout.pie(); var outerRadius = width / 2;
var innerRadius = width / 4;
var arc = d3.svg.arc()
.innerRadius(innerRadius)
.outerRadius(outerRadius); var color = d3.scale.category10(); var arcs = svg.selectAll("g")
.data(pie(dataset))
.enter()
.append("g")
.attr("transform","translate("+outerRadius+","+outerRadius+")"); arcs.append("path")
.attr("fill",function(d,i){
return color(i);
})
.attr("d",function(d){
return arc(d);
}); arcs.append("text")
.attr("transform",function(d){
return "translate(" + arc.centroid(d) + ")";
})
.attr("text-anchor","middle")
.text(function(d){
return d.value;
}); console.log(dataset);
console.log(pie(dataset)); </script> </body>
</html>

【 D3.js 入门系列 --- 9.1 】 生产饼图的更多相关文章

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

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

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

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

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

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

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

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

  5. 【 D3.js 入门系列 --- 2 】 如何使用数据和选择元素

    接着上一讲的内容,这次讨论如何选择元素和使用数据.    现在页面中有三行文字,代码为: <p>Hello World 1</p> <p>Hello World 2 ...

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

    下面开始用D3.js处理第一个简单问题,先看下面的代码: <html> <head> <meta charset="utf-8"> <ti ...

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

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

  8. 【 D3.js 入门系列 --- 2 】 怎样使用数据和选择元素

    本人的个人博客首页为: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/. 转载请注明出处,谢谢. 接着上一讲的内容,这 ...

  9. 【 D3.js 入门系列 --- 2.1 】 关于怎样选择,插入,删除元素

    本人的个人博客首页为: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/. 转载请注明出处,谢谢. 在D3.js中,选择 ...

  10. 【 D3.js 入门系列 --- 0 】 简介及安装

    家是我的个人博客: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/.转载请注明出处,谢谢. D3的全称是(Data-D ...

随机推荐

  1. 最近做RTSP流媒体的实时广播节目

    //h264视频流打包代码 // NALDecoder.cpp : Defines the entry point for the console application. #include < ...

  2. onsubmit事件

    var oForm = document.getElementById("form1"); oForm.onsubmit = function(){   alert("你 ...

  3. 动软.NET 分页存储过程UP_GetRecordByPage

    1, ------------------------------------ --用途:支持任意排序的分页存储过程 --说明: ----------------------------------- ...

  4. JCombox

    A component that combines a button or editable field and a drop-down list. The user can select a val ...

  5. linux学习(一个) 在unbuntu通过添加新的用户

    最近安装了双系统,开始折腾unbuntu该.Linux系统是一个多用户操作系统,非常多的人才完整的操作需要管理员权限,完全管理员权限是非常重要的.人谁是刚开始学习,般用户的权限即可了,相对于刚開始学习 ...

  6. Chapter 2 User Authentication, Authorization, and Security(4):限制SA帐户管理权限

    原版的:http://blog.csdn.net/dba_huangzj/article/details/38817915,专题文件夹:http://blog.csdn.net/dba_huangzj ...

  7. 照片教你eclipse通过使用gradle 打包Android

    gradle其他优点不说,在android当应用程序公布.假设你要算一些渠道,gradle 在节目包装散装优势:下面给大家介绍的图形 按eclipse当出口 选择Android:例如下面的附图 一步一 ...

  8. design pattern Builder 生成器设计模式

    其实设计模式可以学习很有趣,你并不需要有这么难啃旱地FOG对我来说,当然,这些都是健康的骨骼啃啃. 在本文中,建造者模式设计一个搞笑的一幕.根据这一模型来学习功夫的方法,哈哈. 基类的第一,设计.那么 ...

  9. oracle 解锁scott账户

    安装oracle数据库的时候忘了解锁账户,再加上一直配置不成功,链接不上,最后终于配置好了,发现没账户可用,oracle好难. oracle版本是 Oracle Database 11g Enterp ...

  10. UML造型——使用EA时序图工具的开发实践和经验

    Enterprise Architect watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3l3NzE=/font/5a6L5L2T/fontsiz ...