0

折れ線グラフは、特定の期間 (過去 2 日間など) の値を 1 日 1 つずつ表示します。ユーザーはこの期間を変更できます (過去 4 日間など)。

問題: 行遷移が非常に見にくいです。問題はデータの変更だと思います:

state 1:      =>   state 2:
days     value     days      value
--------------     ---------------
today-2    5       today-4     3
today-1    8       today-3     9
                   today-2     5
                   today-1     8

上記の例では、たとえば、値が 5 だった前の最初のデータ ポイントが値 3 に遷移し、x 軸で今日の 4 に左にシフトされます。私が望んでいるのは、5 と 8 が右にシフトし、5 と 8 の値のままで、2 つの新しいデータ ポイントが 0 からステージに入るということです。悲劇の現在の状態を示すこの画像を見てください (1 週間から 4 週間への移行):

醜い遷移

これで、新しいデータを添付するときにキーを割り当てることができることがわかりました (たとえば、この例では、キーは値の日付になります)。円 (このチャートでは非表示になっていて、値の上にマウスを置くと表示されます)。これらの円は完全に移行します。残念ながら、チャートの構成方法が原因で、ここの行でこれを機能させることができませんでした。

  • 各チャートは、「空の」チャートを初期化する「init_chartX」関数によって作成されます (たとえば、線のパスを追加します)。
  • 各チャートは「update_chartX」関数によって更新されます。

そのため、init 関数では、次の行を設定しました。

// Add paths for line1 and line2
svg.append("g")
    .append("path")
    .attr("class", "line1");

そして、更新機能でキーを使用してデータを追加しようとすると..

svg.selectAll(".line1").data(data, function (d) { return formatDate(d.date); })

..「d」が定義されていないため、結果は例外です。これは、init 関数で「 .line1 」要素が設定されているためだと思います。init 関数で設定されていない円で使用すると、問題なく動作します。

var dots1 = svg.selectAll(".circle1").data(data, function (d) { return formatDate(d.date); });

dots1.enter().insert("circle")
    .attr("class", "circle1");

円は initfunction でセットアップされず、オンザフライで追加されます。一方、ラインについては、これを行う方法がわかりませんでした。

私の質問への答えは、リンクまたはいくつかの便利なヒントになる可能性があります..Mike Bostock の Path Transition ページと、一般的な更新パターンのチュートリアルは既に見ました..多分私はそこで盲目でした. 助けてくれてありがとう!

4

1 に答える 1

0

おお、やっと見つけ。キーバインディング行はありません。これにより、長さが異なるデータを変更するためのスムーズな移行が少し難しくなりますが、エラーが発生し続けた理由がようやくわかってうれしいです..

EDIT 私は解決策を見つけました:行に添付する前にデータを逆にします。したがって、上記の私の例は次のようになります。

state 1:      =>   state 2:
days     value     days      value
--------------     ---------------
today-1    8       today-1     8
today-2    5       today-2     5
                   today-3     9
                   today-4     3

そして、移行は想定どおりに機能します..とても簡単で、愚かな私は以前にそれを理解していませんでした。(x 軸はその影響を受けません。時間の経過とともに右に伸びています)

于 2013-11-09T00:52:20.340 に答える