折れ線グラフを更新する最良の方法を探しています。着信データは「新しい」ものではなく、多くの異なるデータ セットを切り替えているだけです。私の問題は、 .append('path') が単に機能していないことです。その理由はわかりません。グループ化に関係している可能性があります。軸とラベルが切り取られないように、グラフの周りに余白を配置するのが好きです。これを行うには、私の HTML は次のようになります...
<svg w, h id='svg-container'>
<g translate(w - margin, h - margin) id='chart-container'>
<g id='x-axis'>
<g id='y-axis'>
chart-container
私のコードでは、を選択して追加したいと思います<path d='...' id='line'>
。select('chart-container').select('path')
後でグラフを更新するときに、その選択を簡単に更新できるようにしたいと考えています。
チャートの初期設定:
var svgContainer = d3.select(element[0]).append('svg')
.attr({
width: width + margin.left + margin.right,
height: height + margin.top + margin.bottom
})
.classed('svg-container', true);
var chartContainer = svgContainer.append('g')
.classed('chart-container', true)
.attr('transform', "translate(" + margin.left + "," + margin.top + ")");
chartContainer.append('path')
.data(activeData)
.attr('d', lineFunc)
.attr('stroke', 'blue')
.attr('stroke-width',
.attr('fill', 'none');
後でチャートを更新します。
svgContainer = d3.select('#line-container').select('.svg-container')
.attr({
width: width + margin.left + margin.right,
height: height + margin.top + margin.bottom
});
chartContainer = svgContainer.select('.chart-container')
.attr('transform', "translate(" + margin.left + "," + margin.top + ")");
chartContainer.select('path')
.data(activeData)
.attr('d', lineFunc)
.attr('stroke', 'blue')
.attr('stroke-width',
.attr('fill', 'none');
残念ながら、これは機能しません。その理由はわかりません。イニシャルchartContainer.append('path')
は (時々) 機能しているように見えますが、chartContainer.select('path')
実際には正しいアイテムが返されません (それ以外の場合もあります)。d3 が軸グループをトラバースし、それらのパスの 1 つを返している可能性がありますか? 私はこれについて間違った方法で進んでいますか?