2017-10-18 11 views
0

私のコードでは、900を超えるデータのJSONをロードしています。これらのデータは、いくつかの機械によって放出されたデータを表す。私は折れ線グラフを描いています。このJSONのキーはマシンの名前を表しています。実行時に折れ線グラフのドメインを変更します

これは私のJSONの構造である:

{"AF3":3605.1496928113393,"AF4":-6000.4375230516,"F3":1700.3827875419374,"F4":4822.544985821321,"F7":4903.330735023786,"F8":824.4048714773611,"FC5":3259.4071092472655,"FC6":4248.067359141752,"O1":3714.5106599153364,"O2":697.2904723891061,"P7":522.7300768483767,"P8":4050.79490288753,"T7":2939.896657485737,"T8":9.551935316881588}

各行がそれぞれのマシンを表し、私が個別に各マシンを見にスペースを入れます。私は現在、contというカウンターの助けを借りてデータを読んでいます。 JSON内のすべてのデータは05000の間です。しかし、私はJSONのいくつかのオブジェクトを変更してドメインを変更してから、一般的にはすべての行の新しいドメインを変更と同じにする必要があります。

たとえば、JSONの行106には"AF3":7000です。 (この場合、ドメインは全ラインについて[0から7000]なければならない)

ライン300、"AF4": - 1000である。(この場合、ドメインは、すべての行は[-1000,7000]であるべきである)

私はこの変更を達成するためにいくつかのデータを目的に合わせて変更しました。可能であれば、アニメーションを使って、すべての行をこの新しいドメインに更新したいと思います。

どうすればいいですか?

これは私のコードです:

http://plnkr.co/edit/KVVyOYZ4CVjxeei7pd9H?p=preview

+0

私はプランナーをフォークし、ドメインを更新するコードを追加しました。これがあなたが探していたものなのかどうか教えてください。 http://plnkr.co/edit/0MuqjRwlCCxp0B3zwXly?p=preview – Gunner

+0

@Gunner @Gunnerあなたの答えに感謝します。友人私はこれをより速くする必要があるので、持続時間を10に設定します。奇妙なことが起こります。 'cont'が106の場合、最大値が' 7000'ですべての行に変更を表示する必要があります。私はラインが再スケーリングされて表示されませんその瞬間にlines.theの変更を参照してください。どうして?現在のドメインコンソールを表示する方法はありますか?例えば、「0-5000」、「0-7000」、「-1000,7000」の場合はhttps://i.imgur.com/S5OrnVY.jpg – yavg

+0

@Gunner申し訳ありませんが、私の部分は、私はちょうど7000の代わりに15000で試して、あなたは変更を参照してください。 (確かに私はドメインを表示したいのですが)私の質問に対する答えはOKです。おそらくそれは私の認識の誤りでした。私はこれらの行を表示し、できるだけ早くデータを表示しようとすることに興味があります。 'duration'が1の値を与えるならば、グラフはなぜトリミングされますか? https://i.imgur.com/zJqN67C.jpg – yavg

答えて

1

すべての折れ線グラフ全体でドメインを更新するには、我々は、新しいデータが押し込まれる前に、ドメインを再計算する必要が

Plunker:http://plnkr.co/edit/AHWVM3HT7TDAiINFRlN9?p=preview

var newDomain = d3.extent(ids.map(function(d) { 
    return aData[cont][d] 
})); 
var oldDomain = y.domain() 
newDomain[0] = newDomain[0] < oldDomain[0] ? newDomain[0] : oldDomain[0] 
newDomain[1] = newDomain[1] > oldDomain[1] ? newDomain[1] : oldDomain[1] 
y.domain(newDomain) 
domain.text(y.domain()) 

グラフをトリミングする場合、データを操作する必要があります(あなたの場合、14個の配列、pushおよびshift oper配列とD3への移行)はすべて1ms以内であり、これでは十分ではないかもしれません。残念ながら、私はこれをバックアップするリソースがありません。誰でもこの解答を編集して証明を提供できる場合は、自由に感じてください。

+0

おかげで友人.. – yavg

+0

あなたが天才であることは間違いありません、あなたの答えは私を満足させ、私は新しいことを学びます。 https://stackoverflow.com/questions/46823073/how-can-i-make-to-display-my-data-more-quickly-on-my-chart – yavg