高性能リアルタイムデータ表示

私は、高性能アプリケーションに使用できるデータ(主に折れ線グラフなど)をプロットするためのツールを探しています。私のデータウィンドウには通常500〜数千ポイントが含まれており、10フレーム程度のフレームレートに満足しています。私はソケット上のバイナリストリームとして自分のデータを受け取ります。私はMac OS X上にいる。

私はいくつかの解決策を試してきました。

R: Dreadfully slow and unable to keep up, painful to read sockets, graph flickers.

matplotlib: Pretty slow but a little usable, also. However, it requires a ton of Python machinery to run, and IMO the API is pretty opaque. Under constant updating, the window containing the graph becomes modal and the Mac beachball appears -- not great for user interaction.

Gnuplot: Much better performance and API. However, communicating large quantities of data to gnuplot happens by generating temporary ASCII (!) files -- this means if my framerate goes up, I'm starting to do tons of disk reads and this is a performance issue.

その他の提案はありますか?

5
@MikeDunlaveyおかげさまですが、プロットやペイントを行うためにどのような技術を使用していますか?
追加された 著者 Jake,
私はあなたがC ++や他の言語の外部でこれを行うことができるかどうかはわかりませんが、メモリのビットマップにペイントし、それを画面に表示することでちらつきを防ぎます。実際にはペイント中に重なっている矩形にクリップされていないので、これは実際には高速です。また、ユーザーにはそうでない場合でも高速に見えます。
追加された 著者 Mike Dunlavey,
まあ、私が言ったように、私はC ++やCの中で働いています。私はあなたがJavaで同じことをすることができると確信しています.WindowsとMFCのようにウィンドウとペイントハンドラがあります。あなたがプログラマーのレベル以下で働いているように思えます。私はそれがRで何でもできると思っていますが、それは医者の中でいくらか掘り起こすでしょう。
追加された 著者 Mike Dunlavey,
あなたの質問は私のものと似ているようです: 追加された 著者 memyself,

3 答え

一時ファイルではなくパイプデータを使ってgnuplotを試してみてください。使用例:

plot "data_acquisition_cmd <" with image

パイプからコマンドを読み取ることで、無限のリプリート・ストリームでパイプすることもできます。

load "while [ 1 ]; do echo 'replot'; done <"

より堅牢なソリューションを得るには、 GnuplotIF のようなPerlからのgnuplotへのインタフェースの使用を検討してください。 、Python( gnuplot.py )があります。これは、gnuplotのプログラムによる制御と、データを直接そこに送ります。

編集:構文訂正のためのJonhooに感謝します。

4
追加された
@ Jonhoo:それはプラットフォーム固有のものですか、それとも私は答えを修正すべきですか?
追加された 著者 Phil H,
反映するように更新されました。
追加された 著者 Phil H,
これを試して、エラーの束を得る人のために、後続の|先頭に<をつけて、それが正しく動作するはずです
追加された 著者 Jon Gjengset,
gnuplotのドキュメント <からわかる内容から、外部スクリプトからデータ(p83)と load (p71)の両方に対してgnuplotにデータをパイプする唯一の方法です。 gnuplotの出力を( save print または output )どこかに出力したい出力操作でのみ、コード>)。
追加された 著者 Jon Gjengset,

The Qwt library has a the ability to plot data in real time. There are even couple of examples in the source tree that provide different ways of plotting in real time. Notably, I'd suggest looking at oscilloscope, refreshtest and realtime examples.

さらに、メーリングリストには最近の議論がありますそれは役に立つかもしれません。

0
追加された

You can consider writing your own data visualization program in Qt by using QCustomPlot http://www.workslikeclockwork.com/index.php/components/qt-plotting-widget/

リアルタイムのデータを表示することができ、出力品質も非常に優れています。これまでも同様のプロジェクトで使用してきました。

0
追加された