D3円グラフを作成し、プレーヤーとスコアを合計得点のパーセントとして表示する必要があります。データは私がplayerScoreをインクリメントし、それに応じて、チャートを更新しようとしています私のスクリプトを通じて、次のようになりますplayersObj
という配列...D3ローカルデータを更新し、更新時にパイを再描画します
var playersObj = [
{"playerName":"Jessica Jones","playerID":157,"playerScore":2},
{"playerName":"Luke Cage","playerID":158,"playerScore":0},
{"playerName":"Matt Murdock","playerID":159,"playerScore":6}
]
をクリックする上で構築され、更新されます。ここでは、この結果として、私は2つの問題を持つチャートを得る
/*
----------------------------------------------------------------------
DONUT CHART
----------------------------------------------------------------------
*/
//Set color range
var color = d3.scale.ordinal()
.range(["red", "green", "blue", "purple", "orange"]);
//Set stage dimensions
var width = 300;
var height = 300;
var radius = Math.min(width, height)/2;
//Select div and add svg into it
var svg = d3.select("#donut").append("svg")
.attr("width", width)
.attr("height", height);
var group = svg.append("g")
.attr("transform", "translate(" + radius + "," + radius + ")")
//Set inner and outer radius of chart
var arc = d3.svg.arc()
.outerRadius(radius - 10)
.innerRadius(radius - 75);
//UPDATE THE DONUT
function updateDonut(){
console.log("Updating donut...");
//console.log(donutData);
//Create pie chart
var pie = d3.layout.pie()
.value(function(d) {
return d.playersScore;
});
var arcs = group.selectAll(".arc")
.data(pie(playersObj))
.enter()
.append("g")
.attr("class", "arc");
console.log(pie(playersObj));
arcs.append("path")
.attr("d", arc)
.attr("fill", function(d) {
//console.log(d);
return color(d.data.playerName);
});
arcs.append("text")
.attr("transform", function(d) {
return "translate(" + arc.centroid(d) + ")";
})
.text(function(d) {
return d.data.firstName+": "+d.data.playersScore
});
}
...私は詳細を設定して、データが更新されると、それを描画しようとするところ、私はこれまで持っているコードです。最初に、chartはplayerScoreが0のエントリにテキストを追加します。誰もが0で始まる方法を見ると、パイのスライスに値がないため、多数の名前が重なって表示されます。第2の問題は、第2の更新後にパイが更新されないことである。 playersObjが更新され、console.log(pie(playersObj));
に正しい値が表示されますが、グラフの表示は変更されません。
私はリンゴのBostockの例を見てきましたが、それはデータを変更しています。単に更新して再描画するだけです。他の投稿はさまざまなアプローチを取っているようですので、私のソリューションがどのように機能するのか混乱しています。
おかげで、私はより良い何が起こっていると私は達成しようとしているを説明するために、あなたのコードでフィドルを追加します。基本的に、pieは0から始まり、プレーヤーのスコアが増加し、円グラフが更新されます。 Fiddleはここにあります:https://jsfiddle.net/johnlayne/e2wyd1fr/ – Layne
単純なif文で重複するラベルのクラスタを隠すように管理しました。まだパイを更新することはできません。 https://jsfiddle.net/johnlayne/e2wyd1fr/1/ – Layne