出力画像の解像度変更
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+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