いくつかのデータに対応する番号で配列を動的にロードしています。別の配列には、関連付けられた名前が付いています。したがって、ロードすると次のようになります。
var dataArray = [10, 150, 206];
var nameArray = [A, B, C];
そしてそれは次のようにグラフ化されます:
var xI = d3.scale.linear()
.domain([0, 206])
.range([0, 270]);
var yI = d3.scale.ordinal()
.domain([0,1,2])
.rangeBands([0,40]);
var chart1 = d3.select('#chart')
.append('svg')
.attr('width', '300px')
.attr('height', '40px')
.append('g')
.attr('class', 'chart')
.attr('transform', 'translate(25,5)');
chart1.selectAll('rect')
.data(dataArray)
.enter().append("rect")
.attr('y', yI)
.attr("width", xI)
.attr("height", 5);
chart1.selectAll('text')
.data(nameArray)
.enter().append('text')
.attr('x', 0)
.attr('y', function(d){ return yI(d) + yI.rangeBand()/2.5; })
.attr('dx', -24)
.attr('dy', '0.25em')
.attr('text-anchor', 'start')
.text(String);
うまくいけば、あなたはまだフォローしています。正常に動作し、これらのアレイに問題はないと言えば十分です。
次のように、各配列に重複する要素がある場合に問題が発生します。
var dataArray = [10, 206, 206];
var nameArray = [A, C, C];
おそらく要素が重複しているため、チャート全体が正しくレンダリングされません。
じっと見つめすぎて、解決策が思いつかなかった気がします。さらに情報が必要な場合はお知らせください。どんなアイデアでも大歓迎です。ありがとう!