gnuplotで他のコマンドからの出力結果をプロットする方法(Piped-data)
gnuplotでデータファイルをプロットするとき、データファイルそのままではなく何かしらの処理をしてからプロットするということはよくあります。その場合、前もって他のソフトやコマンドを用いてデータファイルに何かしらの処理をし、別のデータファイルとして保存。それをgnuplotでプロットすることになるでしょう。
それでもいいのですが、データ処理とプロットをひとまとめに出来れば処理工程を減らすことが出来ます。
そしてgnuplotには「Piped-data」という、他のコマンドの出力結果をデータファイルかのように扱える機能があります。これによりデータ処理とプロットをひとまとめにすることが出来ます。
解説すると、これはtest.datというデータファイルをawkコマンドで処理したものをプロットしています。awkコマンドでは1列目はそのままで、2列目と3列目のデータを加算したものを2列目として出力しています。
gnuplotでは以下のようにusingで列ラベルを指定してプロットすることが出来ます。
しかし、test02.datの列ラベルは「#」でコメントアウトされているので、上のコマンドでプロットしようとしてもエラーとなります。その場合、以下のようにsedコマンドで「#」を削除すれば列ラベルで指定したプロットが出来るようになります。
その他、gnuplot関連のブログ記事
それでもいいのですが、データ処理とプロットをひとまとめに出来れば処理工程を減らすことが出来ます。
そしてgnuplotには「Piped-data」という、他のコマンドの出力結果をデータファイルかのように扱える機能があります。これによりデータ処理とプロットをひとまとめにすることが出来ます。
Piped-dataを使う時の書式
Piped-dataを用いる時の書式は「<」記号を用いて、以下のようになります。gnuplot> plot "< awk '{print $1, $2+$3}' test.dat" w l
解説すると、これはtest.datというデータファイルをawkコマンドで処理したものをプロットしています。awkコマンドでは1列目はそのままで、2列目と3列目のデータを加算したものを2列目として出力しています。
sedコマンドを使った例
次に以下のようなデータファイル(test02.dat)を例にPiped-dataの使い方を考えてみます。#a b c
1 3 10
2 4 20
3 1 15
4 9 22
5 2 19
6 3 11
gnuplotでは以下のようにusingで列ラベルを指定してプロットすることが出来ます。
gnuplot> plot 'test02.dat' using "a":"b" w l
しかし、test02.datの列ラベルは「#」でコメントアウトされているので、上のコマンドでプロットしようとしてもエラーとなります。その場合、以下のようにsedコマンドで「#」を削除すれば列ラベルで指定したプロットが出来るようになります。
gnuplot> plot '< sed "s/#//" test02.dat' using "a":"b" w l
最後に
Piped-dataで使えるのはコマンドラインでのコマンド処理に限られますが、データファイルの簡単な処理や整形などいろいろ応用が効くでしょう。その他、gnuplot関連のブログ記事
コメント
コメントを投稿