gnuplotでシステム側のコマンドを使う、コマンドの実行結果を取得する方法(system)

gnuplotでは「system」というコマンドを使用することで、システム側のコマンドを実行することが出来ます。

例えば、gnuplotをインタラクティブモードで使っているときに、フォルダ内のファイルを確認するという使い方が出来ます。データファイルをプロットする時にフォルダ内のファイル名を確認したい時に便利かと思います。

使えるコマンドについてはgnuplotを実行しているシステム(OS)に依りますが、ここではLinux(Ubuntu 18.04 LTS)上で実行しているものとして話を進めることにします。


systemコマンドの実行例

systemコマンドの実行方法

フォルダ内のファイルを「ls」コマンドで確認したい場合は、systemコマンドを用いて以下のように書きます。
gnuplot> system "ls"

コマンドの実行結果を取得する方法

上記の方法ではコマンドの実行結果は画面上に出力されますが、これを文字列として変数に取得することも出来ます。この場合、systemコマンドでは括弧を付けて以下のように記述します。
gnuplot> d = system("date")
(dという変数にdateコマンドの出力結果を入れる)
これをグラフタイトルにするには
gnuplot> set title d
gnuplot> plot sin(x)

というようにすればよいでしょう。

 

フォルダ内のファイル名を取得しプロットに利用する

応用的な使い方として、フォルダ内のファイル名を取得してデータプロットに使う方法を説明していきます。話としては以下の記事に関連するものです(wordやwords関数の使い方はその記事を読んで下さい) 。
フォルダ内に以下の5つのファイルがあるものとします。
「001.dat, 002.dat, 003.dat, 004.dat, 005.dat」
これをまとめてプロットする場合、以下のようなコマンドとなります。
gnuplot> f = system("ls *.dat")
gnuplot> files(n) = word(f, n)
gnuplot> plot for [i=1:words(f)] files(i)

解説すると、まず拡張子datのファイルのファイル名をlsコマンドで取得して、それを変数fに入れます。fの中身はファイル名が書かれた単なる文字列なので、これをword関数を用いてfiles(n)というユーザー関数を作成。後はplot内のforループを用いてプロットするという形になります。

また、ユーザー関数を作らずとも以下のようにも書くことが出来ます。
gnuplot> f = system("ls *.dat")
gnuplot> plot for [i=1:words(f)] word(f, i)



その他、gnuplot関連のブログ記事

コメント

スポンサーリンク


このブログの人気の投稿

gnuplotでプロットなどの色をcolornameの指定で変更する

catコマンドの出力を行番号付きにするためのコマンドラインオプション(-n, -b)

Ubuntu Softwareが起動しないのでいろいろと調べてみる(Ubuntu 20.04.1 LTS)

gnuplot : グラフにグリッド線を描く方法(set grid)

gnuplot : プロット画像のサイズ指定について(set sizeとの違い)