【D3.js 学习总结】9、D3布局-饼状图

d3.layout.pie()

在第4章D3 创建SVG里我们讲过 圆弧图 的制作方法,我们需要准备这样的数据才能画出圆弧:

    var angle = 2*Math.PI;
    var data = [
        {
            startAngle: 0,
            endAngle: 0.2*angle
        },
        {
            startAngle: 0.5*angle,
            endAngle: 0.8*angle
        }
    ];

如果都是自己去计算startAngleendAngle,那太繁琐了,这时候就可以用到饼状布局来生成需要的数据。

千万记住:布局不是要直接绘图,而是为了得到绘图所需的数据。

饼图(Pie)的API说明

  • pie.endAngle -取得或设置饼布局整体的结束角度。
  • pie.padAngle - 取得或设置饼布局填充角度。
  • pie.sort - 控制饼片段的顺时针方向的顺序。
  • pie.startAngle - 取得或设置饼布局整体的开始角度。
  • pie.value - 取得或设置值访问器函数。
  • pie - 计算饼图或圆环图中弧的开始和结束角度。

我们通过一个制作一个饼状图来讲解饼状布局。

1. 数据

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

2. 数据转换

var pie = d3.layout.pie();
var data = pie(dataset);

通过饼状布局转换数据后,data数据被转换成如下形式:

3. 绘制图形

创建svg容器

var width = 400;
var height = 400;
var outerRadius = 150; //外半径
var innerRadius = 0; //内半径,为0则中间没有空白

var svg = d3.select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height);

创建弧形svg生成器

var arc = d3.svg.arc() //弧生成器
    .innerRadius(innerRadius) //设置内半径
    .outerRadius(outerRadius); //设置外半径

定义颜色比例尺

var color = d3.scale.category10();

定义弧形路径容器

var arcs = svg.selectAll("g")
    .data(data)
    .enter()
    .append("g")
    .attr("transform", "translate(" + (width / 2) + "," + (width / 2) + ")");

生成弧形路径并填充颜色

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.data;
    });

arc.centroid(d) 能算出弧线的中心,所以用来放置文本最合适了。

要注意,text() 里返回的是 d.data ,而不是 d 。因为被绑定的数据是对象,里面有 d.startAngle、d.endAngle、d.data 等,其中 d.data 才是转换前的整数的值。

查看在线演示

时间: 2025-01-21 14:36:18

【D3.js 学习总结】9、D3布局-饼状图的相关文章

【D3.js 学习总结】8、D3布局介绍

布局是 D3 中一个十分重要的概念,可以理解成 "制作常见图形的函数",有了它制作各种相对复杂的图表就方便多了. D3 与其它很多可视化工具不同,相对来说较底层,对初学者来说不太方便,但是一旦掌握了,就比其他工具更加得心应手. 下图展示了 D3 与其它可视化工具的区别: 布局的作用是:将不适合用于绘图的数据转换成了适合用于绘图的数据. D3 总共提供了 12 个布局: 饼状图(Pie) 力导向图(Force) 弦图(Chord) 捆图(Bundle) 直方图(Histogram) 堆栈

D3.js实现饼状图的方法详解_javascript技巧

前言 小编在之前已经跟大家分享过关于怎样用柱状图和折线图这两种基本图表.这两种图表都是有坐标轴的,现在来说一种没有坐标轴的图表--饼图. 饼状图实现 还是和之前一样,我们先把简单的画图框架搭起来,添加SVG画布.但是这里需要注意的是,为了方便后面画饼图上的弧形,我们把组合这些元素的g元素移动到画布的中心: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"

Android mpchart饼状图怎么改它的布局,在哪个地方改

问题描述 Android mpchart饼状图怎么改它的布局,在哪个地方改 就是想把圈起来的位置放在左上角 然后饼状图放在它的下面居中 ,主要告诉我在什么地方改就好了 解决方案 mLegend.setPosition(Legend.LegendPosition.RIGHT_OF_CHART);你当前设置的是RIGHT_OF_CHART,这个方法可以改

jQuery.Highcharts.js绘制柱状图饼状图曲线图_jquery

在数据统计和分析业务中,有时会遇到客户需要在一个图表中将柱状图.饼状图.曲线图的都体现出来,即可以从柱状图中看出具体数据.又能从曲线图中看出变化趋势,还能从饼状图中看出各部分数据比重.Highcharts可以轻松实现三图合一的效果. 复制代码 代码如下: var chart;             $(document).ready(function() {                 chart = new Highcharts.Chart({                     c

Excel教程 制作半圆饼状图的方法

  今天小编就教大家制作半圆饼状图,有需要的朋友不要错过学习的机会咯! 下面,开始制作吧! ①首先准备源数据,在C2单元格输入公式: =B2/SUM($B$2:$B$7) ②回车,得到的结果为小数,并不是我们想要的百分比形式.选中数字,单击菜单栏--开始,将格式换为百分比. ③向下填充单元格,将数据计算出来,并在最后添加1个100%. ④按住Ctrl键选中A1:A8以及C1:C8区域,单击菜单栏--插入--图表--饼图--二维饼图. ⑤饼图插入成功,右击,从弹出的右键菜单中选择设置数据系列格式.

Excel制作半圆饼状图的方法

今天小编就教大家制作半圆饼状图,有需要的朋友不要错过学习的机会咯! 下面,开始制作吧! ①首先准备源数据,在C2单元格输入公式: =B2/SUM($B$2:$B$7) ②回车,得到的结果为小数,并不是我们想要的百分比形式.选中数字,单击菜单栏--开始,将格式换为百分比. ③向下填充单元格,将数据计算出来,并在最后添加1个100%. ④按住Ctrl键选中A1:A8以及C1:C8区域,单击菜单栏--插入--图表--饼图--二维饼图. ⑤饼图插入成功,右击,从弹出的右键菜单中选择设置数据系列格式. ⑥

使用rgraph在JavaScript中制作饼状图

问题描述 使用rgraph在JavaScript中制作饼状图 使用rgraph在JavaScript中制作饼状图,数据和结构都正确,但是就是显示不出来饼状图 解决方案 这个没用过,一直用的d3和Echarts,最简单的办法就是找个官方的demo,把数据给改掉,别改其他东西先试试.

phpexcel图乱码-无人能解。。phpexcel生成饼状图,在Windows下正常在Linux下乱码!

问题描述 无人能解..phpexcel生成饼状图,在Windows下正常在Linux下乱码! 生成图片导出时,在Windows下整成显示,在Linux上导出的文件里只有乱码 但如果只生成表格,都可以正常显示,这个是代码: include ""PHPExcel.php""; include ""PHPExcel/Writer/Excel5.php""; //用于输出.xls的 //创建新的对象 $objPHPExcel = ne

Echarts柱状图,饼状图,折线图案例

在使用Echarts之前需要做的工作是引入Echarts所需的js: <script type="text/javascript" src="${scriptsPath}/echarts/echarts.min.js" charset="utf-8"></script> 定义要在那个div区域显示图形:  <div class="similarity-sentence" id="simi