Gnuplot

出力画像の解像度変更

set term png size 1280,720

時間軸の日付指定

set timefmt "%Y %m %d %H %M %S"
set xdata time
set format x "%H:%M"

Gnuplotフォントのサイズ指定

どこかで以下を指定する。フォント名,サイズ
set tics font "Calibri,10"

pm3d問題

Gnuplotのpm3dは各セルごとに区切ったデータを作る必要がある。
そうではなくもっと簡単にpm3dのようなグラフを作るソフトGraphRがある。

複数グラフプロットの場合のコツ①

multiplotを使って、複数のグラフを描画する場合、x軸は1つだけ表示し、他のグラフは非表示にしたい場合がある。
何も考えずにunset xticsを使うと、1つ目はグリッド線があるが、2つ目以降はグリッド線が消えてしまう。
この問題を解消するのは、2つ目以降に次の指定をすれば良い
set format x ""

閉じられた範囲の塗りつぶし

データファイルは、閉じた系になるようにデータを並べておく必要がある
p [-600:600][0:2] "gndtest_tv_whl1.csv" with filledcurves lt 0 ti ""

Gnuplotでアニメーション

Gnuplot+perlなどで大量のグラフを作成し、動画に変換したい場合がある。その場合はto_aviを使うと良い。
perlスクリプトも参考までに

Gnuplot+Windows

Windows用のGnuplotをインストール(もしくは解凍)し、適当な場所におく。スクリプトファイルの拡張子は***.gpとし、.gpを登録する(アプリケーションをGnuplotで指定する)。すると、スクリプトファイルをダブルクリックするだけで、実行される(便利)。

よく使うテンプレ

set term png
#set term windows
set size 0.6,0.6

set datafile separator ","

set lmargin 10
set bmargin 3
set rmargin 2
set tmargin 1

set output "result_WHLMTQ.png"
set xlabel "Time[sec]"

set key left bottom
set grid
set format y "%3.0f"

set multiplot layout 2,1  #multiplotの開始、縦3横2自動配置

set format y "%4.0f"
set ylabel "WHL[RPM]/Mag.[10^-3 Nms]"
p [:12000][-200:600] \
"out1.csv" u 1:($60*60/(2*3.141592)) w l lw 1 ti "WHLX",\
"out1.csv" u 1:($61*60/(2*3.141592)) w l lw 1 ti "WHLY",\
"out1.csv" u 1:($62*60/(2*3.141592)) w l lw 1 ti "WHLZ",\
"out1.csv" u 1:($63*10**3) w l lw 1 ti "|Tin_Mag|"

set format y "%2.1e"
set ylabel "Euler Angle[deg]"
p [:12000][:] \
"out1.csv" u 1:(sqrt($56*$56+$57*$57+$58*$58)) w l lw 1 ti "Tin_Mag"
# axis x1y2

unset multiplot 
#pause -1

1つの図に3つのグラフで大きさが非対称(1:1:5)

set term png
set size 0.7,0.7

set datafile separator ","

set lmargin 10
set bmargin 3
set rmargin 2
set tmargin 1

set output "result.png" 

set grid
set format x "%2.0f"
set format y "%2.0f"

set multiplot layout 3,1  #multiplotの開始、縦3横2自動配置

#
set xlabel "SATTIME [sec]"
set ylabel "Sun Angle [deg]"
set xtics
set size   1.0 , 0.68
set origin 0.0 , 0.0
p [1161700:1162010][:20] "140606_1308_ACS_graphdata.csv" u 2:282 w l ti ""

#
set xlabel ""
set ylabel "ACSmode"
unset xtics
set ytics ('NOP' 0, 'RDM' 1,'SAM' 2,'C/O' 3)
set grid
set size   1.0 , 0.3
set origin 0.0 , 0.55
p [1161700:1162010][-0.5:3.5] "140606_1308_ACS_graphdata.csv" u 2:169 w l ti "" 2 

#
set xlabel ""
set ylabel "Sunpre"
unset xtics
set ytics ('D' 1, 'N' 0)
set grid
set size   1.0 , 0.3
set origin 0.0 , 0.7
p [1161700:1162010][-0.5:1.5] "140606_1308_ACS_graphdata.csv" u 2:174 w l ti "" 3

unset multiplot 

1つの図に2つのグラフで大きさが非対称

set term png
set size 0.6,0.6

set datafile separator "," 

set lmargin 10
set bmargin 3
set rmargin 2
set tmargin 1 

set output "result.png"

set grid
set format x "%2.0f"
set format y "%2.0f"

set multiplot layout 2,1  #multiplotの開始、縦3横2自動配置 

#
set xlabel "SATTIME [sec]"
set ylabel "Sun Angle [deg]"
set xtics
set size   1.0 , 0.83
set origin 0.0 , 0.0
p [1161700:1162010][:20] "140606_1308_ACS_graphdata.csv" u 2:282 w l ti ""

#
set xlabel ""
set ylabel "Sunpre"
unset xtics
set ytics ('D' 1, 'N' 0)
set grid
set size   1.0 , 0.3
set origin 0.0 , 0.7
p [1161700:1162010][-0.5:1.5] "140606_1308_ACS_graphdata.csv" u 2:174 w l ti "" 3

unset multiplot 

1つの図に2つのグラフを貼り込む(大きさ同じ)

set term png
set size 0.6,0.6

set datafile separator ","

set output "result.png"
set xlabel "Time"
set ylabel "Amp."

set grid
set format y "%2.1f"

set multiplot layout 2,1  #multiplotの開始、縦3横2自動配置

p [:100][:2] "result.csv" u 1:2 w l ti "input"
p [:100][:2] "result.csv" u 1:3 w l ti "output" 3

unset multiplot 

トラブルシュート

  • 日本語の入ったファイルをGnuplotで開こうとすると、Gnuplotが落ちることがある
  • パスも同様

最小二乗法

Gnuplotで近似曲線を用いた最小二乗法を使用するには、以下のようにする。
まず、近似曲線の関数を仮定する。
f(x) = a+b*exp(c*x)
次に、各値の初期値を指定する(指定しなくても近似は可能だが、発散してしまったり、上手く近似できないケースが多い)。初期値は正解値に近い値を入れておくと良い。差異が大きいと収束しない可能性が高くなる。
a = 0.001
b = 0.01
c = 0.1
最後に、最小二乗法を用いたフィッティングを行う。
fit f(x) "hoge.dat" u 1:2 via a,b,c
上手くいけば、a,b,cの近似値が表示される。
WHLのロストルク定数の算出を行う際には、単位に気を付けること。[rpm]->[rad/s],[mNm]->[Nm]など。


数式を表記する

Gnuplotで数式を表記するには、enhancedを使う。これにより、^(ハット)と_(アンダーバー)を使い累乗や添字を表記することができる。
set term postscript enhanced

ギリシャ文字を使用する

といってもGnuplot自体が対応しているわけではなく、単純にフォント(ギリシャ文字)を指定して実現している。下記のようにターミナル指定し、ラベルやタイトル中にフォント指定する。画面上では実現されず、出力されるファイル中において実現される。ただし、画像タイプは、EPSでなければならない。png等ではギリシャ文字を使用することはできない。
set term postscript enhanced
set xlabel "{/Symbol a}"

垂直線を引く

Gnuplotでグラフを描いていると垂直線を描きたい場合がたまにある。これはGnuplotの媒介変数モードを利用して実現できる。
ct1 = 引きたいx座標
set trange[:]  y座標のレンジ
set parametric 媒介変数モード 
p "hoge.dat" w l,ct1,t 0

異なる軸上にプロットする

x軸とy軸をそれぞれ指定することができる。同時に指定することもできる。
set format y "%2.1f"
set ytics nomirror
set y2tics 0, 5
set xlabel "Time[sec]"
set ylabel "Motor current[A]"
set y2label "Motor voltage[V]"
p "hoge1.dat" w l, "hoge2.dat" w l axes x1y2
p "hoge1.dat" w l, "hoge2.dat" w l axes x2y1

CSVファイルをプロットする

Gnuplotでは、データの区切り文字を指定できる。デフォルトではスペースになっているが、CSVファイルの場合には、これを「,」に指定すればよい。
set datafile separator ","

日付/時間型データのプロット

以下のようにフォーマットを指定することで、任意の形状の日付/時間をプロットできる。ただし、区切りがスペースの場合は、正しくプロットできないので注意。
set xdata time
set timefmt "%Y-%m-%d"
plot "sample.dat" using 1:2 with boxes

世界地図の描画

粗いがGnuplotを用いて世界地図データから地図を描画することもできる。等高線との合成は難しい(調査中
画像をクリックすると、生データに飛びます。
もっと細かい世界地図や色々な図法の世界地図を紹介している人いた。これ良い。分解能の問題はこれで解決。
set term png
set datafile separator ","
set contour
#set cntrparam levels 30
set contour base
unset surface
set view 0,0
#unset key
set output "result_dens.png"
sp "result_600km.csv" u 2:1:3 w l 

白地図をフリーウェア「グラフスキャナ」で読み取るともっと細かい数値地図が得られる

名前:
コメント:
最終更新:2016年04月20日 00:41