私は D3 と部分的に SVG をまったく知らないので、いくつかの基本的な質問を受けました。まず、問題のコードはhttp://dotnetcarpenter.github.io/d3-test/で表示できます。D3.jsを使用したシンプルな円グラフの例とPie Chart Update IIを例として使用して実行しました。始める。
ご覧のとおり、低いパス値が高い値に切り替わると、最終的にアニメーションが歪んでしまいます。これは明らかに私が望むものではありません。計算の順序が間違っていると思いますが、どうすればよいかわかりません。最後の例のコードを使用しています。
function change() {
//...
path.transition().duration(750).attrTween("d", arcTween); // redraw the arcs
}
// where arcTween is
function arcTween(a) {
var i = d3.interpolate(this._current, a);
this._current = i(0);
return function(t) {
return arc(i(t));
};
}
別の問題は、セクターにラベルを配置することです。変更機能に更新内容を入れて、値が 0 から 100 の間の場合にのみそれらを読み込んでレンダリングすることができます。最初の例を見ると、次のようなことができると思います。
text.data(data)
.text(setText)
.attr("transform", function (d) {
// we have to make sure to set these before calling arc.centroid
d.innerRadius = 0;
d.outerRadius = radius;
return "translate(" + arc.centroid(d) + ")";
})
.attr("text-anchor", "middle") //center the text on it's origin
text は d3 の選択で、arc は次のとおりです。d3.svg.arc().outerRadius(radius)
しかし、Firefox で「Unexpected value translate(NaN,NaN) parsing transform attribute.」という警告が表示され、ラベルが重ねて表示されます。
助けやヒントをいただければ幸いです。ありがとう!