私は何日もこの問題に悩まされてきました。
したがって、次の形式のオブジェクトのデータセットがあります。
dataset = [{metric:"revenue",value:0.03},{metric:"sales", value:0.15},{metric:"churn", value: 0.06},{metric:"logins", value: 0.45}]
次のコードは、4 つのメトリック名をグリッド パターンで表示します (meshy、meshx はグリッドの座標点、meshsize はグリッドのサイズです。つまり、グリッドの正方形の中央にテキストを配置するだけです)。
svg.selectAll("text")
.data(dataset)
.enter()
.append("text")
.text(function(d){
return d.metric;
})
.attr("y",function(d,i){
return meshy[i] + meshsize/2;
})
.attr("x", function(d,i){
return meshx[i] + meshsize/2;
})
.attr("font-size",25)
.attr("font-family","serif")
.attr("text-anchor","middle")
.attr("font-weight","bold");
ここで、次のようにメトリック名のすぐ下にメトリックの値を配置したいと思います。
svg.append("text")
.data(dataset)
.text(function(d){
return (d.value);
})
.attr("y",function(d,i){
return meshy[i] + meshsize/2 + 20;
})
.attr("x", function(d,i){
return meshx[i] + meshsize/2 ;
})
.attr("font-size",25)
.attr("font-family","serif")
.attr("text-anchor","middle")
.attr("font-weight","bold");
ただし、これは FIRST メトリックのメトリック名の下にある値のみを返します。他の 3 つの値のテキストは DOM にもありません。https://github.com/mbostock/d3/wiki/Selections#wiki-htmlで説明されているように、.text を .html に置き換えるなど、複数のアプローチを試しましたが、成功しませんでした。代わりに段落要素を追加しようとしました-これは機能しますが、p要素はリスト内のsvg本体の下に配置され、それらを正しい位置に移動する明確な方法はありません. 上記のコードは、必要なものを取得するのに最も近いコードですが、何らかの理由で最初の値のテキストしか表示されません。ただし、仕事を成し遂げる d3 のあらゆるアプローチを受け入れることができます: 値がそのすぐ下にある 4 つのメトリック名