[ 岡山大学 | 理学部 | 地球科学科 | 地球および惑星大気科学研究室 ]

大気科学演習1

gnuplot

for ループ

シェルスクリプトの for ループと同様の機能をgnuplotでも使うことができる.

gnuplot> set datafile separator ','
gnuplot> plot for [i=2014:2018] '/home/atmos/ipesc/sample/amedas/Okayama_Okayama_'.i.'.csv' using 0:2

変数 i に 2014 から 2018 までの数字を順番に入れて,どんどん重ね描きする. 変数をファイル名に埋め込むところでは,変数を「.」で囲んでいる(gnuplotではこうすることになっている).

ループで複数の行をまわすこともできる. for の前に do をつけて,繰り返し部分を { と } で囲む.

gnuplot> do for [i=2014:2018] {
more> set term pngcairo
more> set output sprintf("dailymean%d.png",i)
more> set datafile separator ','
more> set xdata time
more> set timefmt "%m/%d"
more> plot '/home/atmos/ipesc/sample/amedas/Okayama_Okayama_'.i.'.csv' using 1:2
more> }
gnuplot> 

ちゃんと動作したら,dailymean2014.png から dailymean2018.png の5つのファイルが生成したはず.





蛇足:smooth unique で平年値を計算する

ここでは5年分をまとめて図にしたが,もっと長い期間をまとめて図にすることも(簡単に)できる. 例えば,1991年から2020年までをまとめて図にすると

気象庁では,気象を評価する基準として平年値というのを定義していて,平年値は30年間の平均値,ということになっている(平年値). 30年分を図にすることができたなら,平年値も図にしてみたいと思うわけですが,それぞれの日について平均を計算するのは面倒と思う. でも,gnuplotで「smooth unique」を使うと簡単に平年値を計算することができる.

smooth unique は,同じ x の値をもつデータを平均化する. 例えば

0  1
0  3
0  5
1  2
1  3
1  7
1  4
2  2
4  5

というデータは,smooth unique を追加して plot すると

0  3
1  4
2  2
4  5

の4つの点がプロットされる.

ということで,平年値を重ねてプロットするなら,30年分のデータをまとめたファイル okayama.csv とかを作って

plot 'okayama.csv' u 1:2 with lines smooth unique

としたらよい.



蛇足2: x の値がばらばらのとき

x の値を丸める関数を使ってから smooth unique する.

gnuplot> nearint(x)=( x-floor(x) <= 0.5 ? floor(x) : floor(x)+1 )
gnuplot> filter(x,y)=nearint(x/y)*y

この filter(x,y) を使うと,[(n-0.5)y, (n+0.5)y] の範囲にある x が丸められて ny になる.

gnuplot> plot 'data.dat' using (filter($1,10)):2 smooth unique with lines




Last Updated: 2024/01/06, Since: 2020/10/24.
This page is generated by Makefile.rd2html.