javascript - 使用新数据更新 d3 图表

标签 javascript d3.js

我有an example of a chart on jsFiddle其中有多组多行。它绘制成功,但我希望能够转换到新的数据集。

该示例应在 4 秒后更新为新数据。尽管调用了图表(并在控制台中输出了一些内容),但线条并未更新。

我已经尝试了很多基于现有的、更简单的例子的变体,但没有成功。我怀疑它是嵌套数据 based on this SO answer这比平时更让我感到困惑。

SO 坚持我在答案中有一些代码,所以这里是我假设我需要添加/更改一些东西的地方:

  svg.transition().attr({ width: width, height: height });
  g.attr('transform', 'translate(' + margin.left +','+ margin.right + ')');

  var lines = g.selectAll("g.lines").data(function(d) { return d; });
  lines.enter().append("g").attr("class", "lines");

  lines.selectAll("path.line.imports")
      .data(function(d) { return [d.values]; })
      .enter().append("path").attr('class', 'line imports');

  lines.selectAll('path.line.imports')
      .data(function(d) { return [d.values]; })
      .transition()
      .attr("d", function(d) { return imports_line(d); });

  // repeated for path.line.exports with exports_line(d).

最佳答案

问题在于您确定所有内容都附加到的顶级 g 元素的方式:

var g = svg.enter().append('svg').append('g');

这只会在没有 SVG 的情况下设置,因为您只处理输入选择。如果存在,g 将为空,因此什么也不会发生。要修复,请在之后明确选择 g:

var g = svg.enter().append('svg').append('g').attr("class", "main");
g = svg.select("g.main");

完整演示 here .

关于javascript - 使用新数据更新 d3 图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23611972/

相关文章:

javascript - Chrome 没有完全删除 indexedDB 数据库

javascript - 过滤 d3.js 的 JSON 数据

javascript - 如何在 D3.js 中生成椭圆 Tilford 树

JavaScript 幻灯片重叠问题

javascript - d3.js 时间尺度意外行为

javascript - D3.js 中的简单散点图示例?

javascript - 在 svg 元素内移动 <text>

javascript - 函数声明返回未定义

javascript - 跨浏览器获取keyCode

javascript - 当某个函数运行时删除事件监听器