複数の線パスを使用して、D3で時系列の折れ線グラフを作成しようとしています。これらのパスにテキストラベルを適用したいと思います。
私が現在行っているのは、ユーティリティ関数を使用して、データのプロパティ( jsonデータのキーであるd3.svg.line
の値)に基づいていくつかの要素を作成することです。plotProps
function makeLine(prop){
return d3.svg.line()
.x(function(d){ return x(d.date); })
.y(function(d){ return y(d[prop]); });
}
var plotProps = ['registered','subscribers','total','anonymous'];
plotProps.forEach(function(prop){
line = makeLine(prop);
svg.append("path")
.datum(graph_data)
.attr("class", "line datapath")
.attr("d", line)
.attr('prop',prop)
.style('text-anchor','middle');
svg.append('svg:text')
.attr('class','label')
.attr("y", "")
.attr("x", "")
.attr("dy", ".71em")
.style("text-anchor", "end")
.text('foobar');
});
ここでの私のアプローチは、データソースが動的である場合、ライン生成に互換性がないという点で、d3のデータ結合アプローチとは非常に直感に反しているように感じます。ラベルもきちんと表示されていないようです。ほとんどの例では、g要素に追加されたラベルを使用しています-私の場合のパスにラベルを追加する必要がありますか(各行の上のテキストのみ)?追加するテキスト要素のx、y属性に関数を渡すと、引数がログに記録されたときにコンソールに何も出力されません。
これらのラベル呼び出しを連鎖させることができる複数の行を生成する方法はありますか?私は十分に明確になっていると思います。