2013-04-17 46 views
1

我正在創建一個圓環(或Piechart),我想將標籤放在區域外。 我爲它創建了一個小提琴http://jsfiddle.net/VeeTee/mA3V7/D3.js圓環圖... arc.centroid(d)不受d.innerRadius和d.outerRadius影響

arcs.append("svg:text") 
    .attr("transform", function(d) { 
     //this is where I want to make a translation to the outside border 
     d.innerRadius = radius; 
     d.outerRadius = height/2; 
     return "translate(" + arc.centroid(d) +")"; 
    }) 
    .attr("dy", ".35em") 
    .attr("text-anchor", "middle") 
    .text(function(d, i) { return d.value.toFixed(2); }); 

arc.centroid(d) - >總是給了相同的結果(因此相同的轉換)

回答

7

不知道你的意思,它總是給你相同的結果,但你可以通過將質心的座標乘以1.5,將標籤放置在圖表的外部。代碼是這樣的。

.attr("transform", function(d) { 
     var c = arc.centroid(d); 
     return "translate(" + c[0]*1.5 +"," + c[1]*1.5 + ")"; 
    }) 

更新jsfiddle here

+0

嗨,謝謝你的回覆... 但是......你知道爲什麼設置 d.innerRadius = radius; d.outerRadius = height/2;在調用arc.centroid(d)之前的所有示例中都會調用arc.centroid offset? – user1231712

+0

設置這些值對我沒有任何影響。 –

+0

檢查此... http://bl.ocks.org/Guerino1/2295263 .attr(「transform」,function(d){//將標籤的原點設置爲圓弧的中心 //我們必須請確保在調用arc.centroid之前設置這些值。 d.outerRadius = outerRadius + 50; //設置外部座標 d.innerRadius = outerRadius + 45; //設置內部座標 return「translate(」+ arc.centroid(d )+「)」; }) – user1231712