【问题标题】:Adding labels to a 3D pie chart in D3.js在 D3.js 中向 3D 饼图添加标签
【发布时间】:2014-09-30 17:34:40
【问题描述】:

我正在尝试在此示例中重新创建 3D 饼图:http://bl.ocks.org/NPashaP/9994181

这是我的版本: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();
 });

我的问题是,如何在饼图之外添加实际数据标签(不是计算的百分比)并确保它们在转换后保持正确的位置?这意味着我希望同时显示百分比和标签。

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

【问题讨论】:

    标签: javascript jquery d3.js


    【解决方案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 + '%' : '');}
    

    这会将标签添加到图表中显示的百分比值的前缀。

    希望这会有所帮助!

    【讨论】:

    • 是的,但我希望将标签添加到馅饼边缘周围的馅饼外,同时保持它们在馅饼内的百分比。这有意义吗?
    • 为什么要在圆环图中使用随机函数?
    • 如何给出动态值而不是随机值?
    猜你喜欢
    • 1970-01-01
    • 2016-09-02
    • 2022-02-15
    • 2011-12-24
    • 2013-03-28
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多