2014-09-30 54 views
1
添加标签三维饼图

我试图重新在这个例子中,三维饼图:http://bl.ocks.org/NPashaP/9994181在D3.js

这里是我的版本:http://jsfiddle.net/26v6cc8x/1/

var salesData=[ 
    {label:"Basic", color:"#3366CC"}, 
    {label:"Plus", color:"#DC3912"}, 
    {label:"Lite", color:"#FF9900"}, 
    {label:"Elite", color:"#109618"}, 
    {label:"Delux", color:"#990099"} 
]; 

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

svg.append("g").attr("id","quotesDonut"); 

Donut3D.draw("quotesDonut", randomData(), 450, 150, 250, 150, 50, 0); 

function changeData(){ 
    Donut3D.transition("quotesDonut", randomData(), 250, 150, 50, 0); 
} 

function randomData(){ 
    return salesData.map(function(d){ 
     return {label:d.label, value:1000*Math.random(), color:d.color};}); 
} 

$(".btn-change").click(function(){ 
     changeData(); 
}); 

我的问题是,如何添加实际的数据标签(而不是计算的百分比),并确保它们在转换后保持正确的位置?含义我希望百分比和标签都显示出来。

任何帮助,非常感谢。谢谢!

回答

1

Donut3D.js更改以下功能:

function getPercent(d){ 
    return (d.endAngle-d.startAngle > 0.2 ? 
    Math.round(1000*(d.endAngle-d.startAngle)/(Math.PI * 2)) /10 + '%' : ''); 
} 

要这样:

function getPercent(d) { 
    return (d.endAngle - d.startAngle > 0.2 ? 
    d.data.label + ': ' + Math.round(1000 * (d.endAngle - d.startAngle)/(Math.PI * 2))/10 + '%' : '');} 

这将前缀标签的百分比值,显示在图中。

希望这会有所帮助!

+0

没错,但我希望标签可以在饼图边缘附近添加到饼图的外部,同时保持饼图内部的位置。那有意义吗? – user3376065 2014-10-03 20:02:30

+0

我们为什么要在圆环图中使用随机函数? – jane 2015-09-02 12:13:42

+0

如何给动态值而不是随机值? – jane 2015-09-02 12:24:52