- 締切済み
Rubyで動的なグラフのGUIを作りたいのですが
RubyでTkライブラリを使用してGUIを作ろうと考えています。 作りたいGUIの内容ですが ・serialPortからのデータをグラフ化したい 例)aruduinoのなどからUART通信でデータを受け取りそのデータをグラフ化したい ・心電図みたいに動的なグラフにしたい ・一つのデータではなく複数のデータを表示したい(線の色を変えるなどして) ・エクセルなどにその結果を保存し、あとで閲覧したい 以上のようなことをしたいと思っています。 RubyもGUIも初心者なのでわからないことだらけで困っております。 できればグラフを動的に表示できる所だけでも教えていただけると助かります。 開発環境 エディタ Vim Ruby -ver 2.0.0p451 gemRuby導入済み ライブラリ graph gnuplot rails serialport msgpack などを導入しています。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ki073
- ベストアンサー率77% (491/634)
NO.1の訂正です。 >gnuplotにしてもRにしても、それぞれのソフトで使える命令をテキストデータとしてRから送るのが基本ですので この部分は gnuplotにしてもRにしても、それぞれのソフトで使える命令をテキストデータとしてRubyから送るのが基本ですので です。 さて、もう少し分かりやすい例を挙げておきます。 sinとcosの2つのデータがプロットされます。 x=0.0 xa=[] # データ保存用配列 y1=[] y2=[] open("|gnuplot", "w") do|gp| while x<30.0 xa << x y1 << Math.sin(x) y2 << Math.cos(x) gp.puts "plot '-' , '-'" # データが100個を超えると最新の100個だけでプロット (xa.size>100 ? xa[-100..-1] : xa).zip(y1.size>100 ? y1[-100..-1] : y1){|a, b| gp.puts "#{a} #{b}"} gp.puts "e" (xa.size>100 ? xa[-100..-1] : xa).zip(y2.size>100 ? y2[-100..-1] : y2){|a, b| gp.puts "#{a} #{b}"} gp.puts "e" x=x+0.1 end end
- ki073
- ベストアンサー率77% (491/634)
いろいろ方法がありますが、 gnuplotにRubyからパイプラインでデータを渡す方法を以前書きましたのでリンクしておきます。 http://okwave.jp/qa/q8182938.html No.1に書いている方法です。 データを順次追加していくのでしたら、縦軸と横軸の範囲を事前に設定してプロットすると見栄えがよくなると思います。 いずれにしてもパラパラ漫画のような感じになります。 replotを使うと動きがスムーズになるようにも思います。 他にはRを使う方法もあります。 rubyにはrsrubyライブラリ(他にもあったような)があります。かなり複雑なグラフがきれいに書けます。 gnuplotにしてもRにしても、それぞれのソフトで使える命令をテキストデータとしてRから送るのが基本ですので、まずそのソフトでグラフ作成の方法を習得してください。
お礼
解答ありがとうございます! さっそくそのやり方をチャレンジしてみます。 お返事が遅くなり申し訳ありませんでした。