gnuplotで疑似ファイル(pseudo-file)を使ったプロット方法 その1

gnuplotではデータファイルをプロットすることが出来ますが、数式をプロットする際にデータファイルとしてプロットするにはどうすればいいでしょう?
という話ですが、それなら何かしらのプログラミング言語などの数式処理でそういうデータファイルを出力してそれをgnuplotで読み込ませればいいわけですが、今回はそれとはちょっと違った話でgnuplotの機能にある疑似ファイルというものを使う方法について解説します。

疑似ファイル(pseudo-file)を使う方法

gnuplotのドキュメントではpseudo-fileとなっているので疑似ファイルと表しますが、個人的にはダミーファイルと言った方がニュアンスとしては分かりやすいです。まぁそれでもドキュメントの方に合わせて疑似ファイルと言うことにして話を進めます。

Special-filenamesについて

まずgnuplotではデータファイルの特別な扱いとしていくつかのSpecial-filenamesというものが存在します。Special-filenamesには
  • ''
  • '-'
  • '+'
  • '++'
があります。その中で'+'と'++'が疑似ファイルとして扱われるもので、今回は'+'を使ったプロット方法について解説していきます。

'++'は3次元プロットなどで使われるようで、また別の機会に解説したいと思います。
''はplot1行で同じデータファイルを複数プロットする場合に、ファイル名の記述を2つ目以降は省略するために用いられます。
'-'はその場でデータを記述するモードに入るようですが、解説は長くなりそうなのでまた別の機会に

疑似ファイル'+'の簡単な使い方

疑似ファイルは形式的にはデータファイル扱いのため、プロットするときはusingオプションを使った記述となります。
例として、cos(x)を疑似ファイルでプロットする場合は
gnuplot> plot '+' using ($1):(cos($1))

という記述になります。($1)はデータファイルの1列目を指定する記述です。疑似ファイル('+'の場合)ではこの1列目だけデータがあるというファイルのため、このような記述となります。

疑似ファイルのプロット間隔を変更する方法

まず疑似ファイルのプロット間隔を細かくしたり広くしたりする方法にはsampleオプションを用いて
gnuplot> plot sample [a=-10:10:0.1] '+' using (a):(cos(a))

と記述します。グラフとしてはxの値が0.1刻みでプロットされます。
aという変数に範囲指定(-10〜10まで)とプロット間隔を指定する方法ですが(変数はaでなくともよい)、試してみると$1を用いるままでも以下のように書くことも出来ました。
gnuplot> plot sample [-10:10:0.1] '+' using ($1):(cos($1))


なお以下のようにすると範囲やプロット間隔が異なるものでも同時にプロットできます。
gnuplot> plot sample [a=-10:10:0.1] '+' using (a):(sin(a)) w p, [b=-15:15:0.2] '' using (b):(cos(b)) w lp

xの値に対しても数式を適用する

さて、ここまでは「using ($1):(cos($1)」のようにyの値についてだけ数式を適用してました。ではxの値は「$1」のようにしか指定出来ないのでしょうか?
早速試してみると、
gnuplot> plot sample [a=0:2*pi:0.1] '+' using (sin(a)):(cos(a)) w p
とxについても数式を用いると
というようなプロットも出来ます。また、以下のようにxにだけ数式を適用すると
gnuplot> plot '+' using (sin($1)):($1) w p

こんなプロットにもなります。
これらのプロットに関しても媒介変数を用いるparametricという機能で描けるようですが、個人的には疑似ファイルを用いる場合の方が簡略的に書けるかなと思います。

最後に

さて疑似ファイルについて解説をしてきましたが、どうだったでしょう?
何か便利な使い方などありましたらコメントして頂けるとありがたいです。


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

Amazon データ解析関連書籍など

コメント

スポンサーリンク


このブログの人気の投稿

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

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

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

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

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