【システム】gnuplotでファイル内のデータを変数として取り込んでプロットする
- Taiju YONEDA
- 2023年8月17日
- 読了時間: 1分
更新日:2023年10月19日
個人的な備忘録ですが、gnuplotユーザーには有用かもしれないので公開しておきます。
p "***.csv" u ($3):($0==1?F0=($4):0,($4)-F0)
力学測定結果のデータなど、初期状態の数値をゼロとしてプロットしたい。そのために1行目のデータを"F0"などの変数に格納して、その後の各データからF0を引きたいが、データファイルが多いときや、くり返し処理でデータファイルを読み込む場合など、自動でF0を読んで差をとってほしい。
たとえば、CSVデータ(***_1.csv)で次のようになっていた場合。
試験回数,時間[sec],移動量[mm],荷重[N]
1,0.01,0,6.36649131774902
1,0.02,0,6.36649131774902
1,0.03,0,6.36649131774902
1,0.04,0,6.36647343635559
1,0.05,0,6.36643171310425
gnuplotスクリプトには、これまで、
F0_1=6.37
F0_2=7.92
p "***_1.csv" u ($3):(($4)-F0_1)
rep "***_2.csv" u ($3):(($4)-F0_2)
と書いてきたが、"F0_30"とかまでくると、さすがに自動化したくなって、参考URLに従って"$0==1?F0=$4:0,($4)-F0"とした。
おそらく"$0"は何行目かの情報でゼロ始まり。
ちなみに$0=0の行はヘッダーなので、
se datafile commentschars '試'
をどこかに記述して読み飛ばさせる。ただし、読み飛ばしても$0のカウントは増える模様。
usingコマンドのy軸の指定の直前にコンマを付けて条件分岐を入れる。
"$0==1?"
$0が"1"つまり2行目であるのが、
"?F0=($4)"
真ならば、F0の変数にそのときの4列目の数を格納する。
":0"
偽ならば、0。(特になにもしないということだと思う)
これで2行目の4列目のデータをF0として格納できるので、すべての$4とF0の差をとれば、y軸のオフセットゼロができる。
参考URL
https://ayapin-film.sakura.ne.jp/Gnuplot/trees.cgi?tw=&log=&search=&mode=&v=1178&e=msg&lp=1178&st=0
Comments