d3.js - NVD3 - 更新数据时不均匀的滴答声

标签 d3.js nvd3.js

当我更新现有 NVD3 图表中的数据时,沿 x 轴的刻度不会以固定间隔呈现。

我正在创建一个 multiBarChart数据来自 d3.json() .数据表示某个日期范围内的点击次数。我有一个单独的日期范围选择器来更新图表的数据。

我有以下内容来创建图表(简化):

initGraph = function(url) {
  d3.json(url, function(data) {
    nv.addGraph(function() {
      chart = nv.models.multiBarChart();

      d3.select('#chart svg').datum(data).transition().duration(500).call(chart);
      nv.utils.windowResize(chart.update);

      return chart;
    });
  });
};

以及更新它的以下函数,该函数在日期选择器中调用:
redrawGraph = function(url) {
  d3.json(url, function(data) {

    d3.select('#chart svg').datum(data).transition().duration(500).call(chart);
    nv.utils.windowResize(chart.update);
  });
};

一切似乎都很好,但有时刻度间距最终会不一致:

Wonky ticks

这仅在更新现有图表时发生。

我花了相当多的时间来验证数据是否正确——x 值以固定值递增——所以我只能认为在重新绘制图表时我遗漏了一些东西。

最佳答案

有点晚了,但你需要打电话chart.update()而不是注册一个新的窗口监听器,这样代码就变成了:

redrawGraph = function(url) {
  d3.json(url, function(data) {

    d3.select('#chart svg').datum(data).transition().duration(500).call(chart);
    chart.update();
  });
};

基本上每次在 nvd3 中更新图表时,都需要调用 chart.update重新绘制它。

请注意 nv.utils.windowResize(chart.update)是等价于
// Register an event listener on windowResize
nv.utils.windowResize(function() {
  // Every time the window is resized, redraw the chart
  chart.update();
});

所以在每次更新时都这样做不会有很好的效果。

关于d3.js - NVD3 - 更新数据时不均匀的滴答声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14543660/

相关文章:

javascript - d3强制布局节点中的链接位置

javascript - 在此 NVD3 多条形图中更改数据集时如何缩放 Y 轴?

javascript - 当范围为 1 时,为什么子弹图显示小数

javascript - 如何使用 json 数据在 d3.js 中创建垂直分组的条形图?

javascript - 文本没有出现在 DOM 对象中?

javascript - 使用滚轮向上滚动时运行函数

javascript - DC 条形图中的条形重叠

javascript - 我正在尝试使用 NVD3 重现示例,但不起作用

javascript - 将对象文字转换为可重用的类?

javascript - stackedgroupedChart 中的 nvd3 双 X 轴