なにがしたい
csvファイルがこんな感じになっている事がよくある
1列目 2列目 3列目 4列目 n列目
1行目 横軸見出し 見出し1 見出し2 見出し3... 見出しn...
2行目 横軸1 値11 値21 値31... 値n1
3行目 横軸2 値12 値22 値32... 値n2
...
グラフのタイトルを「見出し」にしてプロットしたい。
gnuplotの他、awkを用いる。
2列目をプロット
テストデータを以下に与える
1列目のDateTimeに対して、複数の縦軸がn個並んでいるような形のあるあるcsv。
test.csv
DateTime,midashi1,midashi2,midashi3,midashi4,midashi5
2015-12-01 00:03:00,5,8,10,41,39
2015-12-01 00:08:00,4,7,9,35,58
2015-12-01 00:13:00,5,5,6,36,60
2015-12-01 00:18:00,4,7,9,36,59
2015-12-01 00:23:00,4,7,7,59,59
2015-12-01 00:28:00,4,5,7,36,60
2015-12-01 00:33:00,3,8,9,36,59
2015-12-01 00:38:00,4,7,10,36,59
縦軸midashi1を、横軸DateTimeに対してプロットするとき
file='test.csv' #ファイル名指定
se g #グリッドon
se xdata time #横軸は時間データだよ
se timefmt "%Y-%m-%d %H:%M:%S" #読み込む時間の形式
se format x "%m/%d\n%H:%M" #x軸の表示方式
se datafile separator "," #データ区切りを空白からコンマにする
p file u 1:2 w l #fileの1列目に対して2列目をプロット
ちなみに
省略形式
se=set
g=grid
p=plot
u=using
w=with
l=line
2列目からn列目をプロット
awkを使ってn列目の値"n"を取得し、for文を使って1つのグラフに2からn列まで出力する。
awkの使い方はsprintfでコマンドを文字列にした後、systemコマンドで使用する。
file='test.csv'
se g
se xdata time
se timefmt "%Y-%m-%d %H:%M:%S"
se format x "%m/%d\n%H:%M"
se datafile separator ","
lastrow=system(sprintf('awk -F, "NR==1{print NF}" %s',file)) #最後の列はawkの組み込み変数NFで読み込んで変数lastrowに入れる
p for[i=2:lastrow] file u 1:i w l #fileの1列目に対してi列目をプロット
#iは2からlastrowまで変化
1行目(見出し行)の見出しをタイトルにしてプロット
awkを使って1行目を読み出し、i列目の値をタイトルにする。
iはfor文で2~最終列まで変化する。
file='test.csv'
se g
se xdata time
se timefmt "%Y-%m-%d %H:%M:%S"
se format x "%m/%d\n%H:%M"
se datafile separator ","
lastrow=system(sprintf('awk -F, "NR==1{print NF}" %s',file))
p for[i=2:lastrow] file u 1:i w l title system(sprintf('awk -F, "NR==1{print $%d}" %s',i,file)) #1行目の2列目~最後の列の文字列をtitleにする