前提
- 5.2系での確認(-cとか使用)
- –persist(-p) オプションを使用。
-p は OS X だとそれなり設定しないと使えません。
-pが設定されてない環境では、~/.gnuplotファイルを設定して、置き換えてから読むと良いかも(#1の最後で触れてます)。
描画関係
複数ファイルのプロット
$ gnuplot -p -c <( echo 'plot for [ i = 1:ARGC ] ARGV[i] w l ; ' ) rand.txt rand2.txt
rand.txt/rand2.txt は、前の奴と同じ
複数カラムのプロット
行を動的に変更させて、プロットさせることも出来るよ。
$ perl -le 'print join " ", $_, rand (10), rand(10) for 0 .. 99' > randml.txt
$ gnuplot -p -c <( echo 'plot for [ i = 1:2 ] ARG1 u 1:(column(i+1)) w l ; ' ) randml.txt
素直に、column 関数を使う、 perl のソフトリファレンス的なやり方で、u 1:($$i)みたいな事が出来ないか探してハマった。
時間軸を使う
ISO 8601
軸を ISO 8601形式にもできますよ。
Backslash-octals(\nnn) are converted to char
Tは、\124と指定しないといけない。
set xdata time
set timefmt "%Y-%m-%d\124%H:%M:%S"
ここさえ気をつければ、range指定時とかは、普通に T を埋め込めばいい(format x の時も)。
で、ミリセカンドの指定の仕方は
Gnuplot tracks time to millisecond precision. Time formats have been modified to match this.
だそうで、%.3S
とかで指定する。
$ cat .gnuplot
set xdata time
set timefmt "%Y-%m-%d\124%H:%M:%S"
set format x "%H:%M:%.3S"
set xtics rotate by 90 right
$ perl -le 'printf "2019-03-08T00:00:00.%02d %s\n", $_ ,rand (10) for 0 .. 99' > randwt.txt
$ gnuplot -p -c <( echo 'load ".gnuplot"; plot ARG1 u 1:2 w l' ) randwt.txt
結構な間知らなかった。
時間軸での STATS
時間軸の stats は、無茶苦茶な結果が出るので無視する。時間軸でない軸の stats は信用できる1。
$ gnuplot -p -c <( echo 'stats ARG1 nooutput; print STATS_index_min_y, STATS_min_y' ) randwt.txt
6 0.00668365412220595
Y軸の値からX軸の値を逆引きするのは、STATS_index_* でインデクスが得られるのでそれを使う。
$ perl -lne 'print if $. == 7' randwt.txt
2019-03-08T00:00:00.06 0.00668365412220595
まあ、ラッパの中での作業となるだろうけど。
-
先に時間軸のフォーマット指定などをすると、statsコマンド自体実行出来ない。 ↩