LoginSignup
7
8

More than 5 years have passed since last update.

gnuplotでcsvの1行目(見出し行)をプロットのタイトルにする

Posted at

なにがしたい

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列目をプロット

midashi_1.PNG

ちなみに
省略形式
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まで変化

midashi_n.PNG

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にする

midashi_title.PNG

7
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8