私はアプリケーションの棒グラフにd3を使用していますが、棒グラフが表すデータ値のテキストで各棒に注釈を付ける必要があります。データに特定のプロパティが存在する場合に条件付きでテキスト要素をレンダリングする
私はこのようにように、これまで取り組んできた:
layers = svg.selectAll('g.layer')
.data(stacked, function(d) {
return d.dataPointLegend;
})
.enter()
.append('g')
.attr('class', function(d) {
return d.dataPointLegend;
});
layers.selectAll('rect')
.data(function(d) {
return d.dataPointValues;
})
.enter()
.append('rect')
.attr('x', function(d) {
return x(d.pointKey);
})
.attr('width', x.rangeBand())
.attr('y', function(d) {
return y(d.y0 + d.pointValue);
})
.attr('height', function(d) {
return height - margin.bottom - margin.top - y(d.pointValue)
});
layers.selectAll('text')
.data(function(d) {
return d.dataPointValues;
})
.enter()
.append('text')
.text(function() {
return 'bla';
})
.attr('x', function(d) {
return x(d.pointKey) + x.rangeBand()/2;
})
.attr('y', function(d) {
return y(d.y0 + d.pointValue) - 5;
})
私は実際には、特定のプロパティがデータ内に存在する場合、テキスト要素を追加したいと思います。
私は、文書内の選択方法がdatum
であることを見て、これが私の必要なものかどうか疑問に思っています。私が探しているプロパティが存在しない場合、追加呼び出しを取り消す方法がわかりません。
おかげで[OK]を
試み2
だから私はそうのようなeach
機能を使用して別の刺し、この時間があった:
layers.selectAll('text')
.data(function(d) {
return d.dataPointValues;
})
.enter()
//This line needs to be my each function I think?
.append('text')
.each(function(d){
if(d.pointLabel) {
d3.select(this)
.text(function(d) {
return d.pointLabel;
})
.attr('x', function(d) {
return x(d.pointKey) + x.rangeBand()/2;
})
.attr('y', function(d) {
return y(d.y0 + d.pointValue) - 5;
})
.attr('class', 'data-value')
}
});
}
私が今持っている問題は、私が取得することですpointLabel
プロパティが存在するかどうかに関係なく追加されたテキスト要素。
append('text')
をそれぞれにダウンロードする必要があるかどうかはわかりませんが、試してみると、d3が特定のコールを期待していないため、エラーが発生します。更新ノードを含むむしろlayers.enter()
選択にテキストを追加するよりも....このバインディングD3のデータを使用する方法について
質問に答えを加えるのではなく、あなた自身の質問に本当に答える必要があります。 – thatOneGuy
私は実際に考えたとおりに解決しませんでした。(しかし、私はあなた自身の質問 – mindparse