将URL添加到饼图的文本中

时间:2015-12-01 06:57:20

标签: javascript d3.js pie-chart

我有一个多层饼图fiddle

代码的部分在这里:

    var color = d3.scale.ordinal()
        .range(["cyan", "green", "blue", "brown", "violet", "orange", "purple"]);

    var arcMajor = d3.svg.arc()
        .outerRadius(function (d) {
            return radius - 20;
        })
        .innerRadius(0);

     var arcOver = d3.svg.arc()
    .outerRadius(radius + 9);
    //this for making the minor arc
    var arcMinor = d3.svg.arc()
        .outerRadius(function (d) {
            // scale for calculating the radius range([20, radius - 40])
            var s = scale((d.data.major - d.data.minor));
            if (s > radius - 20) {
                return radius - 20;
            }

            return scale(d.data.major - d.data.minor);
        })
        .innerRadius(0);

 var arcOverMin = d3.svg.arc()
    .outerRadius(radius - 90 );

    // Define the div for the tooltip
    var div = d3.select("body").append("div")   
        .attr("class", "tooltip")               
        .style("opacity", 0);

    var labelr = 260;
    var pie = d3.layout.pie()
        .sort(null)
        .value(function (d) {
            return d.major;
        });


    var svg = d3.select("body").append("svg")
        .attr("width", width)
        .attr("height", height)
        .append("g")
        .attr("transform", "translate(" + width / 2 + "," + height / 1.95+ ")");

    data = [{
        major: 500,
        minor: 250,
        grp: 1,
        URL:'http://google.com'
    }, {
        major: 300,
        minor: 200,
        grp: 2,
        URL:'http://www.bing.com'
    }, {
        major: 100,
        minor: 100,
        grp: 3,
        URL:'http://www.facebook.com'
    }, {
        major: 150,
        minor: 100,
        grp: 4,
        URL:'http://www.stackoverflow.com'
    }, {
        major: 100,
        minor: 100,
        grp: 5,
        URL:'http://www.stackexchange.com'
    }];

看起来像this

我无法添加网址以显示在饼图周围的彩色数字上。

我该怎么做?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

像这样在文本DOM中添加一个单击侦听器,然后在新的浏览器中打开它。

.text(function (d, i) { return d.value.toFixed(2); })
        .on("click", function(d){
        var win = window.open(d.data.URL, '_blank');
        win.focus();
    });

工作代码here

希望这有帮助!