如何在数据更新时更新可重用的 d3.js 图形
How to update reusable d3.js graph when data updates?
我在这里将d3.layout.pack图形示例重构为一个可重用的模块。现在我想在数据更新时更新图形。但是当我用新数据调用图形时,新图形会呈现在旧图形之上。您可以在此处找到该问题的演示。
基本上,为了模拟数据更新,我以这种方式调用一个具有setinterval的函数:
function test(){
d3.select('#vis')
.datum(data2)
.call(cluster);
}
setInterval(test, 1500);
您可以在文件底部找到"数据更新"部分。你能检查一下有什么问题吗?
你的代码有几个问题。首先,由于范围问题,检查 SVG 是否已存在不起作用。更好的方法是选择所需的元素并检查您的选择是否为空。
var svg = d3.select("svg > g");
if(svg.empty()){
svg = d3.select(this).append("svg:svg").attr("width", width)
.attr("height", height)
.append("svg:g")
.attr("transform", "translate(" + (width - r) / 2 + "," + (height - r) / 2 + ")");
}
请注意,我已经将 g
元素的追加合并到其中,因为这就是您正在操作的内容。
其次,除了输入选择之外,您还需要处理更新和退出选择。我已将其添加到您的jsfiddle中。
相关文章:
- 有条件更新d3.js力图中节点的最佳方法
- 更新d3.js雷达图
- 如何不断更新 d3 图中 x 轴的范围
- 如何更新 d3 图的数据
- 需要有关更新D3.js wordcloud的帮助
- 如果源 json 已更新(添加或删除项目),则动态更新 D3 旭日
- 使用不同的值和不同的数据大小更新 D3 柱形图
- 使用新数据更新 D3 饼图.json
- 更新 D3 条形图时调用 svg 元素的宽度的问题
- 更新 d3 中的条形图以生成多个图表
- 如何使用更新的数据集更新 d3.js饼图
- 更新d3.js组中的数据
- 通过Merge更新D3.js(NVD3.js)数据
- 如何根据用户输入更新D3 SVG图表
- 更新d3堆叠条形图/柱形图上的数据
- 如何更新d3中的绑定数据
- 使用D3或JQuery更新D3创建的屏幕
- 使用间隔更新d3数据
- 我可以基于到不同数据对象的数据联接来更新D3选择器中的DOM元素吗
- 更新D3数据并不能从仿3d示例中删除旧数据