これにより、mbostock の優れた回答に加えて、ネストされた側面が明確になる場合があります。
データには 2 度の入れ子があります。2 つのオブジェクトの配列があり、それぞれに int の配列があります。最終的な画像にこれらの違いを反映させたい場合は、それぞれを結合する必要があります。
1 つの解決策を次に示します。各ユーザーは groupg
要素で表され、各スコアは で表されますrect
。これを行うにはいくつかの方法がありますdatum
。svg で使用してから、各 で恒等関数を使用するかg
、または でデータを直接結合できますg
。data
onを使用するのg
がより一般的ですが、ここでは両方の方法を示します。
SVG でデータムを使用する:
var chart = d3.select('body').append('svg')
.datum(data) // <---- datum
.attr('width',800)
.attr('height',350)
.selectAll('g')
.data(function(d){ return d; }) // <----- identity function
.enter().append('g')
.attr('class', function(d) { return d.user; })
.attr('transform', function(d, i) { return 'translate(0, ' + i * 140 + ')'; })
.selectAll('rect')
.data(function(d) { return d.scores; })
.enter().append('rect')
.attr('y', function(d, i) { return i * 20; })
.attr('width', function(d) { return d; })
.attr('height', 20);
グループ ( g
) 要素でデータを使用する:
var chart = d3.select('body').append('svg')
.attr('width',800)
.attr('height',350)
.selectAll('g')
.data(data) // <--- attach directly to the g
.enter().append('g')
.attr('class', function(d) { return d.user; })
.attr('transform', function(d, i) { return 'translate(0, ' + i * 140 + ')'; })
.selectAll('rect')
.data(function(d) { return d.scores; })
.enter().append('rect')
.attr('y', function(d, i) { return i * 20; })
.attr('width', function(d) { return d; })
.attr('height', 20);
繰り返しますが、これらの g 要素を作成する必要はありませんが、そうすることで、ユーザー スコアを別の方法で表すことができるようになり (変換とは異なる y を持ちます)、次のように別のスタイルを与えることもできます。
.jim {
fill: red;
}
.ray {
fill: blue;
}