我正在寻找更新折线图的最佳方法。传入的数据不是“新的”,它只是在许多不同的数据集之间切换。我的问题是 .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 可能会遍历我的轴组并返回其中一条路径吗?我会以错误的方式解决这个问题吗?