2012-05-01 13 views
6

私は以下の指示に従っています:http://bost.ocks.org/mike/path/ 1本の線で単一のグラフを作成し、アニメーション化しました。d3.js - 複数行の変換と変換

とは、グラフに複数の行を作成する方法を考え出し:Drawing Multiple Lines in D3.js

主な問題:私は私のデータ配列に新しいデータで&プッシュをシフトした後、私は複数の行を移行に苦労していますが。

私はNと行作成します(時間:エポック時間は、前方ステップ)

var seriesData = [[{time:1335972631000, value:23}, {time:1335972631500, value:42},...], 
        [{time:1335972631000, value:45}, {time:1335972631500, value:13},...], 
        [{time:1335972631000, value:33}, {time:1335972631500, value:23},...}], 
        [...],[...],... 
        ]; 

var seriesColors = ['red', 'green', 'blue',...]; 

line = d3.svg.line() 
     .interpolate(interpolation) 
     .x(function(d) { return x(d.time); }) 
     .y(function(d) { return y(d.value); }); 

graphGroup.selectAll(".line") 
     .data(seriesData) 
      .enter().append("path") 
      .attr("class", "line") 
      .attr("d", line) 
      .style('stroke', function(d, i) { return seriesColors[i]; }) 
      .style('stroke-width', 1) 
      .style('fill', 'none'); 

とJavaScriptのsetInterval(とN行を更新しようとしていますが... )メソッドを呼び出す:

graph.selectAll("path") 
    .data(seriesData) 
    .attr("transform", "translate(" + x(1) + ")") 
    .attr("d", line) 
     .transition() 
    .ease("linear") 
    .duration(transitionDelay) 
    .attr("transform", "translate(" + x(0) + ")"); 

それは完全に初期の描画ができますが、すぐに私が更新するデータ配列を食べれば、線は消えるだけです。


UPDATE 01

私はXのエポックタイム値を使用していますことに気づいた(X軸は日付を示しています。時間)私は上記の説明のseriesDataを使用した場合、私の例としては、おそらく動作します。

x(1)を使用して「変換」、「変換」していましたが、x(0)は大きな数字を返していました。私のグラフを移行する必要がありました。

I手動アプローチを使用する更新N線法(上記)修飾:

新しい問題を: すぐグラフの移動が正常に左が、ライン/グラフポップ右に戻って、各setInterval更新が実行されます。

seriesData配列を正しくプッシュ/シフトしますが、実際に描画されている新しいデータを表示するために左にスクロールしません。 http://bl.ocks.org/1148374

任意の考え:

graph.selectAll("path") 
     .data(seriesData) 
     .attr("d", line) 
     .attr("transform", null) 
      .transition() 
     .ease("linear") 
     .duration(2000) 
     .attr("transform", "translate(-200)"); 

私が使用しているもう一つの参照は、このですか?エラーの可能性として私に飛び出し

+0

これは、x3とd3.scale.linear()の間にd3.time.scale()を使用していると考えています。 – August

+0

これを解決しましたか?その場合は、ソリューションを投稿してください。 –

+0

私は3つの別々のグラフを1つの行にそれぞれ作成しました。次に、CSSを使用してグラフIDを重ねます。管理して再利用する方が簡単でした。特に私はそれが滑らかにしたい場合.. – August

答えて

1

ことの一つが使用されているデータの呼び出しで、初期は

.data(seriesData) 

アップデートが問題を引き起こす可能性が

.data([seriesData]) 

を使用しますが、あります残りのことを見ずに告げるのは難しいですが、おそらくそれをjsfiddleに置くことができますか?

+0

優れた観測が、それは更新の問題を修正していません。 – August

+0

[データ]はこの例から来ました:http://bl.ocks.org/1148374 – August

+1

これは、最初のものに一致するように2番目のデータコールを変更するときに何も変わらないと思いますか? - すべてのデータを1つの要素配列として渡すことが必要なケースは確かですが、これは私が理解できるものではないようです。私はもっ​​と多くのコードを見ることなくもっと多くを助けることができないのではないかと心配しています。 – Josh