1
D3が新しく、新しいデータでドーナツチャートを更新しようとしています。D3新しいデータを含むドーナツが適切に描画されない
データがスワップされると、計算されたセグメントが間違っています。一見、チャートは適切なドーナツのように見えるかもしれませんが、ドーナツを調べると、セグメントの1つがドーナツ全体のサイズであることがわかります。
Iは完全にドーナツチャートを再描画するコードのコメント行が含まれていました。コメントを外すと、グラフがどのように表示されるのかがわかります。
更新機能:
function updateDonut(selector, dataset){
var width = 120;
var height = 120;
var donutWidth = 25;
var radius = Math.min(width, height)/2;
var color = d3.scale.category20c();
var pie = d3.layout.pie()
.value(function(d) {
return d.values;
})
.sort(null);
var arc = d3.svg.arc()
.innerRadius(radius - donutWidth)
.outerRadius(radius);
var svg = d3.select(selector).select("svg > g");
if(svg.empty()){
svg = d3.select(selector)
.append('svg')
.attr('width', width)
.attr('height', height)
.append('g')
.attr('transform', 'translate(' + (width/2) + ',' + (height/2) + ')');
}
/*Uncommenting below line shows donut should look like*/
//svg.selectAll("path").remove();
var path = svg.selectAll("path");
path = path.data(pie(dataset));
path.enter().append("path")
.attr("fill", function(d, i) { return color(i) })
.attr("d", arc)
path.exit().remove()
}