36

我正在尝试使用 nvd3.js 创建一个实时图表,该图表将定期更新,并且给人的印象是数据是实时处理的。

现在我已经能够创建一个可以定期更新图表的函数,但我无法在“状态”之间进行平滑转换,比如向左转换的线。

是我使用 nvd3.js 所做的,这里有趣的代码是:

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

现在,我已经能够使用 d3.js 生成我想要的东西,但我希望能够使用 nvd3.js 提供的所有工具。是我想使用 nvd3 制作的内容

使用 d3.js 进行转换的有趣代码是:

function tick() {

    // update the domains
    now = new Date();
    x.domain([now - (n - 2) * duration, now - duration]);
    y.domain([0, d3.max(data)]);

    // push the accumulated count onto the back, and reset the count
    data.push(Math.random()*10);
    count = 0;

    // redraw the line
    svg.select(".line")
        .attr("d", line)
        .attr("transform", null);

    // slide the x-axis left
    axis.transition()
        .duration(duration)
        .ease("linear")
        .call(x.axis);

    // slide the line left
    path.transition()
        .duration(duration)
        .ease("linear")
        .attr("transform", "translate(" + x(now - (n - 1) * duration) + ")")
        .each("end", tick);

    // pop the old data point off the front
    data.shift();

}
4

1 回答 1

13

你可能想看看: D3 Real-Time streamgraph (Graph Data Visualization)

特别是答案的链接:http: //bost.ocks.org/mike/path/

一般来说,我看到了两种处理垂直过渡问题的方法:

  • 过采样在真实点之间有一些线性插值,点之间的间隔越小,垂直过渡看起来就越“水平”(但缺点是你会得到很多“假”点,这可能是不可接受的,具体取决于图表的使用)
  • 通过在末尾添加来扩展图表,并翻译左侧的图表,确保在您删除它(剪辑或执行任何其他技巧)之前不显示仍然可用的左侧部分,这是最好的,上面提到的解决方案确实那
于 2013-05-16T23:18:44.320 回答