- 締切済み
データをリアルタイムのようにグラフ化
MATLABで作成した.matファイルもしくはExcelファイルなどに格納した あるデータ配列の数値をグラフ化するときに 時間によって変化するのが目に見えるようにするにはどうすればいいでしょうか? 例えば 100行2列のデータを2次元折れ線グラフとして表示するときに プログラムを実行すると1秒ごとに1行分のデータがプロットされ 時間ごとにグラフが推移していくようにしたいです。 また、そのような変数をいちいち与えず ファイルを読み込むだけにしたいのですが どのようなファイル形式ならばできるのでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BLK314
- ベストアンサー率55% (84/152)
ファイル形式はどのようなものでも可能です。 ご自分で好きなように設計してください。 Excelでデータを作って、ファイル化するなら いわゆるcsvが向いているかとも思います。 もちろん、ファイルアクセスの効率化を図るため バイナリ・ファイルを用いることもできます。 また、MFC前提の場合は”シリアライズ"機能を用いると楽です。 (読み書きとも同じシリアライズを用いなければなりませんが...) 基本的には1秒間隔のタイマーを用いて制御します。 タイマーといっても各種ありますが 1秒という非常にのんびりした間隔ですので いわゆるWM_TIMERで問題ないと思います。 WM_TIMER応答関数内で ファイルを1行読み出し データ追加 該当領域無効化 を行います 該当領域無効化を行うと WM_PAINTが飛んできます (MFCならOnDrawが呼ばれます) その中でデータを参照してグラフを描画させます。 >100行2列のデータ この程度のデータであれば、 タイマーで毎回1行ずつファイル読み出しするのは非効率なので 最初にファイルの全データを読み取ったほうが良いと思います。 (すべてファイルに格納されていればの話ですが...) また、MFCのシリアライズを用いた場合には 基本的にこの方法となります。 (シリアライズでも毎秒の読み出しができないわけでは ありませんが、一気に読みだす場合に比べ作業が大変です) あとは ファイルアクセスを行うので I/Oエラー対策ですね。 C++なので例外でいいと思います。 MFCなら(シリアライズを使わない場合でも) CFileException を捕捉して対応可能です。