2016-02-09 46 views
0

我想一個提示(不知道是否是可能的,雖然...)中插入一個餅圖,並結束了與下面的代碼中的圖表:D3插入提示

var tip = d3.tip() 
    .attr('class', 'd3-tip') 
    .offset([-10, 0]) 
    .html(
     function(d) { if (d.company == "A" || d.company == "B") { 
      return "Company: <span style='color:#ccff33'>" + d.company+ " </span>"; 
     } 

      else { 

      var data = [60,40]; 
      var r = 100; 

      var color = d3.scale.ordinal() 
       .range(["blue", "orangered"]); 

      var base = d3.select(this) 

      var svg = base.append("svg") 
       .attr("width", 500) 
       .attr("height", 500); 

      var group = svg.append("g") 
       .attr("transform", "translate(30, 30)"); 

      var arc = d3.svg.arc() 
      .innerRadius(10) 
      .outerRadius(r); 

      var pie = d3.layout.pie() 
       .value(function (d) { return d;}); 

      var arcs = group.selectAll(".arc") 
       .data(pie(data)) 
       .enter() 
       .append("g") 
       .attr("class", "arc"); 

      arcs.append("path") 
       .attr("d", arc) 
       .attr("fill", function (d) { return color(d.data); }) 



      } 
     } 



); 

baseSvg.call(tip); 

第一與文本聯繫工作正常,但應該畫餅圖的Else部分不返回任何內容,我已經掙扎了幾天。我認爲我的錯誤來自選擇部分,但無法弄清楚。 我需要在工具提示中彈出餅圖。

非常感謝您的幫助。

回答

1

「但應借鑑餅圖不返回任何else部分」

這正是爲什麼失敗,則函數返回空值,然後清除工具提示的HTML屬性,覆蓋你剛剛精心放置什麼在小費內。

試試這個在你的代碼的末尾:

return base.html(); 

那你只是把工具提示的一切變成了一個HTML字符串,該提示將隨後在現有(和相同)HTML複製。

+0

優秀!謝謝。另一個問題,如果我可以,工具提示顯示,如鼠標懸停鼠標按預期,但餅圖疊加起來。就像第一次有1個圖表一樣,那麼我第二次懸停我的鼠標時,有2個圖表,然後是3,依此類推...... – user3700389

+0

每次渲染工具提示時,您都會追加新的svg和g元素。可能最簡單的方法就是在添加東西之前將其刪除開始處的工具提示空白 - >'base.html(null)' – mgraham

+0

就像魅力一樣工作。 非常感謝 – user3700389