D3.js - 带有多个环的圆环图单击事件

时间:2015-11-29 10:14:30

标签: javascript jquery angularjs d3.js charts

我一直试图用多个环来实现D3.js甜甜圈。但是,问题在于点击事件,因为它点击第一个环时工作正常但是,在点击第二个环时显示奇怪的行为。此外,它还显示了鼠标悬停的一些奇怪问题。

  

{"元数据":空,   "数据":{graphDetails":[{"显示名":" MUW""名称":" DEF&# 34;,"得分":5},{"显示名":" ABC""名称":" ABCD&#34 ;,"得分":15},{"显示名":" DEFA""名称":" DEF" "得分" 35}]," graphOneDetails":[{"显示名":" D1""名称&#34 ;:" D1""得分":11},{"显示名":" D2""名称" :" D2""得分" 25},{"显示名":" D3""名称&#34 ;: " D3""得分":22}]},"成功":真}

  //Define arc ranges
    var arcText = d3.scale.ordinal().rangeRoundBands([0, width], .1, .3);
    // Determine size of arcs
    var arc = d3.svg.arc().innerRadius(radius - 75).outerRadius(radius - 25);
    var arc_2= d3.svg.arc().innerRadius(radius - 25).outerRadius(radius);
    //Create the donut pie chart layout
    d3.layout.pie().value(function(d){
    return d["score"];
    }).sort(null);
    //Append SVG attributes and append g to the SVG
    d3.select("#donut-chart")
    .attr("width", width)
    .attr("height",height)
    .append("g")
    .attr("transform","translate("+radius+","+radius+")");

    //Define Inner Circle
    svg.append("circle")
    .attr("cx",0)
    .attr("cy",0)
    .attr("r",280)
    .attr("fill","#fff");
    //Calculate SVG paths and fill in the colors
    var div = d3.select("body")
    .append("div")
    .attr("class","tooltip")
    .style("opactiy",0);
    // Append First Chart
    var g = svg.selectAll(".arc").data(pie($scope.categories))
    .enter()
    .append("g")
    .attr("class","arc")
    .on("click",function(d, i){
        alert(d.data.name)
    }).on("mouseover",function(d){
        alert(d.data.name);
    }).on("mouseout",function(d){
       alert(d.data.name);
    });
   g.append("path")
    .attr("d",arc)
    .attr("fill","#024");
   g.append("text")
    .attr("transform", function(d){
        return "translate("+arc.centroid(d)+")";
    }).attr("dy",".35em")
    .style("text-anchor","middle")
    .attr("fill","#fff")
    .text(function (d,i){
        return d.data.displayName
    });
   g.selectAll(".arc text").call(wrap.arcText.rangeBand());
   //Append Second Chart
   g.data(pie($scope.divisions)).append("path")
    .attr("d",arc_2)
    .attr("fill","#eee");
   g.on("click, function(d,i){
    alert(d.data.name);
   }).on("mouseover", function(d){
    alert(d.data.name);
   });
   //Append text to second chart
      g.append("text")
    .attr("transform", function(d){
        return "translate("+arc_2.centroid(d)+")";
    }).attr("dy",".35em")
    .style("text-anchor","middle")
    .attr("fill","#fff")
    .text(function (d,i){
        return d.data.displayName
    });
   g.selectAll(".arc text").call(wrap.arcText.rangeBand());

在初始状态下它工作正常,但是,当我单击一个图表时,它会正确显示数据。当我点击内部图表并将我的json更新为

  

{"元数据":空,   "数据":{graphDetails":[{"显示名":" MUW""名称":" DEF&# 34;,"得分":5},{"显示名":" DEFA""名称":" DEF&#34 ;,"得分" 35}]," graphOneDetails":[{"显示名":" D1""名称&# 34;:" D1""得分":11},{"显示名":" D3""名称&#34 ;:" D3""得分":22}]},"成功":真}

然后它将内部图表显示为完整的甜甜圈,但外部图表显示为圆弧而不是完整的圆环。当鼠标悬停在第二个图表上时,鼠标会发生同样的问题,并且所有内容都正确地作为工具提示。 (我没有包含工具提示的代码)。但是,我将鼠标移交给ABC并将其返回DEFA。所以,我认为必须有一些与我附加这两个弧的方式相关的东西。

编辑1 使用我的数据集创建了JSFidle并且它没有显示任何内容

http://jsfiddle.net/pcr3ogt4/

0 个答案:

没有答案