このようにデータを適当に間引いてからプロットしたいときには, コマンドplotに every というキーワードを付けて実行します.
キーワード every の使い方はややこしいので, まず一番簡単な使い方から見ることにします.
再び図9.15のデータファイル multi-data.dat を考えます. このグラフで, データ点を2個ずつ飛ばしてプロットしてゆくには どうしたらよいでしょうか?
plot 'multi-data.dat' every 3 with linespoints [Enter]とします. なお, データが間引かれていることを明示するために, with linespointsというキーワードを使用しています.
上のようなコマンドを打ち込んだときに得られるグラフは 図9.21のようになります.
図9.16と図9.21を 比較すると, 図9.21ではデータ点が間引かれている 分だけグラフがぎざぎざになっていることがわかるでしょう.
データ点を間引くときの一般的な記法は,
キーワード every のより詳しい使い方を説明する前に, gnuplotがデータファイルの各行を解釈する仕方について もう少し詳しく理解しておく必要があります.
例として, 図9.22(a)のような, いくつかの空白行を含むデータファイルを考えます. ファイル名を block-data.dat としておきましょう.
このファイルを, gnuplotは次のように解釈します.
なお, データファイルに空白行がない場合には, データは1個のブロックから成るものとみなされ, 最初の行から順番に0,1,2,...という番号が 振られてゆきます.
ファイル block-data.dat が実際にどのように解釈されるかについては, 図9.22(b)を参照して下さい.
さて, 図9.22をふまえた上で, キーワード every のより詳しい説明に移りましょう.
キーワード every の完全な使い方は,
every 行刻み:ブロック刻み:初期行:初期ブロック:終了行:終了ブロックのようになります. 上記において, 「行刻み」, 「ブロック刻み」, 「初期点」, 「初期ブロック」 , 「終点」および「終了ブロック」と書かれた部分には, それぞれ0以上の整数が入ります. これらの意味について表9.1に まとめておきます.
意味 | |
行刻み | データ行を何行ごとに読み出すか指定, 何も指定しなければ1になる (すべてのデータ行を読む) |
ブロック刻み | データのブロックを何ブロックごとに読み出すか指定, 何も指定しなければ1になる (すべてのブロックを読む) |
初期行 | データ行をどの行から読み始めるかの指定, 何も指定しなければ0になる(最初の行から読む) |
初期ブロック | データブロックをどのブロックから読み始めるかの指定, 何も指定しなければ0になる(最初のブロックから読む) |
終了行 | データ行をどの行で読み終えるかの指定, 何も指定しなければデータファイルの最後の行まで読む |
終了ブロック | データブロックをどのブロックで読み終えるかの指定, 何も指定しなければデータファイルの最後の行まで読む |
これらのオプションはすべて省略可能です. ただし, 省略の仕方は少し変わっていて,
これだけではわかりにくいと思われるので,
表9.2にいくつか例を示しておきます.
省略する項目 | 記法 |
完全なオプションの指定 | 行刻み:ブロック刻み:初期行:初期ブロック:終了行:終了ブロック |
終了ブロックを省略 | 行刻み:ブロック刻み:初期行:初期ブロック:終了行 |
終了行と終了ブロックを省略 | 行刻み:ブロック刻み:初期行:初期ブロック |
終了行のみを省略 | 行刻み:ブロック刻み:初期行:初期ブロック::終了ブロック |
初期ブロックと終了行を省略 | 行刻み:ブロック刻み:初期行:::終了ブロック |
終了行以降を省略 | 行刻み:ブロック刻み:初期行:初期ブロック |
終了行以降とブロック刻みをを省略 | 行刻み::初期行:初期ブロック |
終了行以降とブロック刻み, 初期行を省略 | 行刻み:::初期ブロック |
行刻み以外をすべて省略 | 行刻み |
終了ブロック以外をすべて省略 | :::::終了ブロック |
では, 実際に 図9.22(a)に示されたデータファイル block-data.dat を使って, いくつかのグラフをプロットしてみましょう.
まず参考のために, どのデータ点も間引かれていないグラフをプロットしておきます.
plot 'block-data.dat' pt 6 ps 2 [Enter]とすると, 図9.23のような グラフが得られます.
続いて,
plot 'block-data.dat' every :::1 pt 6 ps 2 [Enter]としてみます. これは, 「グラフを第1ブロックまでプロットする」という意味になります. 得られるグラフは図9.24のようなものに なります.
さらに,
plot 'block-data.dat' every :::2:3 pt 6 ps 2 [Enter]としてみます. これは, 「第3ブロックまで, 各ブロックの番号2の行までをプロットする」 という意味になります. 結果として, 図9.25のようなグラフが得られます.
続いて,
plot 'block-data.dat' every 2:2 pt 6 ps 2 [Enter]としてみます. これは, 「2個のブロックごとに1個のブロックを使う, 各ブロック内でも2個のデータ行ごとに1個のデータ行を使う」, すなわち1ブロック読むごとに1ブロック読み飛ばし, 各ブロック内部でも1行読むごとに1行読み飛ばすという意味に 解釈されます. 上記のコマンドを実行すると, 図9.26のようなグラフが得られます.
途中のデータブロックから描画を始める例も見ておきましょう.
plot 'block-data.dat' every ::1:1:3:2 pt 6 ps 2 [Enter]とすると, 「第1ブロック(2番目のブロック: 番号は0から始まっていることに注意) から第2番目のデータブロックまで, 番号1のデータ行から番号3のデータ行までを プロットする」という意味になります. これをプロットすると, 図9.27のようなグラフが得られます.