補遺) numo/gnuplot のインストールとグラフの描画

インストール

gnuplot のインストール

$ sudo apt-get update 

  ... (略) ...

$ sudo apt-get install gnuplot-x11 fonts-noto-cjk

  ... (略) ...

$ sudo gem install numo-gnuplot

  Fetching: numo-gnuplot-0.2.4.gem (100%)
  Successfully installed numo-gnuplot-0.2.4
  Parsing documentation for numo-gnuplot-0.2.4
  Installing ri documentation for numo-gnuplot-0.2.4
  Done installing documentation for numo-gnuplot after 2 seconds
  1 gem installed

時系列プロット

GitHub のレポジトリ <URL:https://github.com/sugiymki/iotex-server/tree/master/ruby> に, サンプルスクリプトが 2 つ置かれている. それを参考にしてほしい.

  • gnuplot.mysqldump.rb : mysqldump で作成した CSV から作図する時に使う
  • gnuplot.grafana.rb : grafana で export した CSV から作図する時に使う. CSV に変換する際に "Mode : Series as rows" を選ぶものとする.

注意事項

スクリプトを実行した時に以下のようなメッセージが表示された場合は, csv ファイルの改行コードを変更する必要がある. Windows と Unix では改行コードの表し方が違う.

$ ruby gnuplot.rb

  /usr/lib/ruby/2.3.0/csv.rb:1883:in `block (2 levels) in shift': Illegal quoting in line 1. (CSV::MalformedCSVError)

nkf コマンドを使うと簡単に変換することができる.

$ nkf -Lu grafana_data_export.csv > temp.csv

散布図

散布図のスクリプトの要点を以下に記す. 2 つの配列を用意して, それを gnuplot の引数として与えれば良い. 以下の例では回帰直線を示す直線も書き込んである. CSV ファイルからデータを読み込む場合には前述の gnuplot.mysqldump.rbgnuplot.grafana.rb を参照すると良い.

$ vi sample.rb

  require 'numo/gnuplot'

  # 配列の定義. 
  var1 = [ ... ]
  var2 = [ ... ]

  # 回帰直線の定数
  a = 77.558
  b = -1.358

  output = "output-test.png"
  Numo.gnuplot do
    debug_on
    set title:    "温度と湿度"
    set xlabel:   "温度 (C)"
    set ylabel:   "湿度 (%)"
    set terminal: "png"
    set output:   "#{output}"
    plot [var1, var2, w: :points, pt:7, title:"ALL"],
         ["#{b}*x+#{a}", lw: 3, t:"#{b}*x+#{a}"]
  end