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/

一般に、垂直遷移の問題に対処する方法は 2 つあります。

  • 実点間に線形補間を持つオーバーサンプリング、および点間の間隔が小さいほど、垂直遷移はより「水平」に見えます (ただし、欠点は、多くの「偽の」点が得られることです。チャートの使用)
  • 最後に追加してチャートを拡張し、左側のチャートを翻訳し、削除するまで(クリッピングするか他のトリックを行う)まだ利用可能な左側の部分が表示されないようにします。それが最善であり、上記の解決策はそうですそれ
于 2013-05-16T23:18:44.320 に答える