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

2019年度 大気科学演習1

gnuplot

区切り文字

gnuplotは,何も指定しないとき,1個以上の空白(連続する空白は1つとみなす)をデータの区切りとして,データを解釈する. 空白以外をデータの区切りとするときには,set data file separator を使って指定する. 例えば「:」が区切りのデータを使うときは,

gnuplot> set datafile separator ":"

日付と時間

日付や時間を使う.

岡山で観測された気温のデータ

/mnt/data/amedas/temperature/Okayama_Okayama_2018.csv

cat や less を使って中を見たらわかるが,これは「,」で区切られたCSV (comma-separated values)と呼ばれる形式のデータ. ファイル名に入っている4桁の数字は年. ファイルの中身は,日付(月/日),日平均気温,日最高気温,日最低気温,である.

このデータは日付順に並んでいるので,とりあえず気温の季節変化を見るだけなら日付の代わりに行番号を使っても用は足りる

gnuplot> set datafile separator ','
gnuplot> plot '/mnt/data/amedas/temperature/Okayama_Okayama_2018.csv' uing 0:2

日付を使ってみる.

gnuplot> set xdata time
gnuplot> set timefmt "%m/%d"
gnuplot> plot '/mnt/data/amedas/temperature/Okayama_Okayama_2018.csv' using 1:2

xdata time を使うときは,必ず using で列を指定しなければならない.

横軸を少し見やすくする

gnuplot> set xtics "01/01", 7776000, "12/31"
gnuplot> replot

set xtics で軸の目盛りを指定する. 3つの数字は,1つ目が始まりの日付,2つ目は目盛りの数字を書く間隔を秒の単位で指定,3つ目は終わりの日付,である.

日付や時間の書式を指定するとき,以下を使うことができる

%d	何日, 1-31
%m	何月, 1-12
%y	何年, 0-99
%Y	何年, 4 桁
%j	1 年の何日目, 1-365
%H	何時, 0-24
%M	何分, 0-60
%S	何秒, 0-60
%b	月名 (英語) の 3 文字省略形
%B	月名 (英語)

timefmt の使い方の例

gnuplot> set timefmt "%H:%M:%S"
gnuplot> set timefmt "%Y-%m-%d"
gnuplot> set timefmt "%Y/%m/%d %H:%M"

for ループ

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

gnuplot> plot for [i=2014:2018] '/mnt/data/amedas/temperature/Okayama_Okayama_'.i.'.csv' uing 1:2

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

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

gnuplot> do for [i=2014:2018] {
more> input=sprintf(",i)
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 '/mnt/data/amedas/temperature/Okayama_Okayama_'.i.'.csv' uing 1:2
more> }
gnuplot> 

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




Last Updated: 2019/11/10, Since: 2019/11/10.
This page is generated by Makefile.rd2html.