gnuplotのplotでforループを使った活用方法(その1)

以前のブログでplotコマンドで用いるforループについて簡単に解説しました。
このときは変数を単に数値として用いる方法と文字列を扱う方法を少し紹介しましたが、いろいろ組み合わせると活用できる幅が大きいです。
今回はそこからいくつか役に立ちそうな活用方法について紹介していきます。

変数に数値を用いる

これは以前のブログで紹介した方法です。簡単には以下のような使い方になります。
plot for [i = 1:5] sin(x) * i

変数に文字列を用いる

変数に文字列を用いる場合の書式は
[moji in "文字列1 文字列2 文字列3 文字列4"]
のようになります。

ファイル名の生成に用いる 

文字列を使う場合の方法として、いくつものデータファイルをプロットする場合の指定方法に使うことが出来ます。
ここではワークフォルダ内にある「001.dat, 002.dat, 003.dat, 004.dat, 005.dat」の5つのデータファイルをプロット指定しています(ついでにtitleにも指定)。
plot for [file in "001 002 003 004 005"] file.".dat" title file
ここではファイル名のリストで拡張子".dat"を省いてリストの外側でそれを付ける形にしています(別にリスト内で拡張子付きのファイル名でも問題ないです)。

変数を複数用いる方法

ここまではループ変数は1つのものを紹介してきました(数値やファイル名)。では変数を複数、例えばファイル名の他に線の色も変数で割り当てたいなどの場合どうすればいいでしょう?
それにはやや入り組んだ手法を用いることになります。

まず1つのplot指定ではループ変数は1つしか使えないようです。
(調べた限りではそうでしたが何か方法があればコメント下さい)
その条件において複数の変数を使いたい場合、複数のリストを作成することで対処することが出来ます。
解説は後回しにしますが、処理を書くと以下のようになります。
file = "001.dat 002.dat 003.dat 004.dat 005.dat"
ifile(n) = word(file, n)
color = "red purple orchid blue coral salmon gold beige violet yellow"
icolor(n) = word(color, n)
plot for [i=1:words(file)] ifile(i) w l lc rgb icolor(i) title icolor(i)


解説すると、ここでは以下の2つのリスト(文字列)を作成しています。
file = "001.dat 002.dat 003.dat 004.dat 005.dat"
color = "red purple orchid blue coral salmon gold beige violet yellow"

(fileに対してcolorの項目数が多いですが、ここでは単に予備的に多めに書いてあるだけです)

次にこのリストからユーザー定義の関数を作成しています。
ifile(n) = word(file, n)
icolor(n) = word(color, n)

ここでgnuplotにある文字列関数「word(string, n)」を用いています。このword関数はスペースで区切られた複数の文字列からn番目の文字列を返します。
(ユーザー定義関数を作らずともword関数そのままでも問題はないです)

最後に以下のplotコマンドにて、iをループ変数としてデータファイルと線の色の二つをそれぞれのリストから指定しています。
plot for [i=1:words(file)] ifile(i) w l lc rgb icolor(i) title icolor(i)
「i=1:words(file)」という指定ですが、ここではwords関数を用いてfileリストにある項目数を取得しています。fileリストに項目が5つあれば「i=1:5」ということになります。
(word関数とwords関数は名前は似ていますが別のものです)


最後に

今回説明した話はプログラミング寄りの話なので、思った通りに使うにはある程度プログラミングの知識が必要になってきます。とは言ってもそれほど難しいことをしているわけではないので、プログラミングの基礎やgnuplotでの文法を押さえれば使いこなせるようになるかと思います。


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

コメント

スポンサーリンク


このブログの人気の投稿

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

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

Pythonのformat()を使って1桁の16進数でも2桁で出力する方法

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

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