next up previous contents
: グラフのスタイルを変更する : 2次元データのプロット : データファイルのどの列を使ってプロットするかを変更する 目次

データを間引く

データファイルからグラフを作るときに, 適切なグラフを作るのに必要なデータ点の数と比較して 実際のデータ点の数が極端に多いと, グラフを作成して保存したときにできるファイルが 無駄に大きくなってしまいます. ですから, このような場合には, データを適当に間引く, すなわち何個かに1個データ点を残して残りは捨てて しまってからグラフを作ったほうが好都合です. これとは別に, グラフが不連続点を含んでいるときに, グラフの連続な部分だけを取り出してプロットしたい という状況もあります.

このようにデータを適当に間引いてからプロットしたいときには, コマンドplotに every というキーワードを付けて実行します.

キーワード every の使い方はややこしいので, まず一番簡単な使い方から見ることにします.

再び図9.15のデータファイル multi-data.dat を考えます. このグラフで, データ点を2個ずつ飛ばしてプロットしてゆくには どうしたらよいでしょうか?

  plot 'multi-data.dat' every 3 with linespoints [Enter]
とします. なお, データが間引かれていることを明示するために, with linespointsというキーワードを使用しています.

上のようなコマンドを打ち込んだときに得られるグラフは 図9.21のようになります.

図 9.21: ファイル multi-data.datのデータ点を2個ずつ飛ばしてプロットしたグラフ
\includegraphics[scale=1]{EPS/gnuplot-data-every-1.eps}

9.16と図9.21を 比較すると, 図9.21ではデータ点が間引かれている 分だけグラフがぎざぎざになっていることがわかるでしょう.

データ点を間引くときの一般的な記法は,

plot 'multi-data.dat' every n [Enter]
です. ここに, 「n」の部分には適当な正の整数が入ります. 上記のように指定されると, gnuplotはデータファイルの データ点を1個使うたびに, それに続いたn-1個のデータ点を 読み飛ばしてゆきます.

キーワード every のより詳しい使い方を説明する前に, gnuplotがデータファイルの各行を解釈する仕方について もう少し詳しく理解しておく必要があります.

例として, 図9.22(a)のような, いくつかの空白行を含むデータファイルを考えます. ファイル名を block-data.dat としておきましょう.

このファイルを, gnuplotは次のように解釈します.

なお, データファイルに空白行がない場合には, データは1個のブロックから成るものとみなされ, 最初の行から順番に0,1,2,...という番号が 振られてゆきます.

ファイル block-data.dat が実際にどのように解釈されるかについては, 図9.22(b)を参照して下さい.

図 9.22: ファイル block-data.doc とそのgnuplotによる解釈
\includegraphics[scale=1]{EPS/8-file.eps}
\includegraphics[scale=1]{EPS/gnuplot-data-block.eps}
(a)ファイル block-data.dat (b)gnuplotによる解釈

さて, 図9.22をふまえた上で, キーワード every のより詳しい説明に移りましょう.

キーワード every の完全な使い方は,

  every 行刻み:ブロック刻み:初期行:初期ブロック:終了行:終了ブロック
のようになります. 上記において, 「行刻み」, 「ブロック刻み」, 「初期点」, 「初期ブロック」 , 「終点」および「終了ブロック」と書かれた部分には, それぞれ0以上の整数が入ります. これらの意味について表9.1に まとめておきます.
表 9.1: キーワード every におけるオプション指定
意味
行刻み データ行を何行ごとに読み出すか指定, 何も指定しなければ1になる (すべてのデータ行を読む)
ブロック刻み データのブロックを何ブロックごとに読み出すか指定, 何も指定しなければ1になる (すべてのブロックを読む)
初期行 データ行をどの行から読み始めるかの指定, 何も指定しなければ0になる(最初の行から読む)
初期ブロック データブロックをどのブロックから読み始めるかの指定, 何も指定しなければ0になる(最初のブロックから読む)
終了行 データ行をどの行で読み終えるかの指定, 何も指定しなければデータファイルの最後の行まで読む
終了ブロック データブロックをどのブロックで読み終えるかの指定, 何も指定しなければデータファイルの最後の行まで読む

これらのオプションはすべて省略可能です. ただし, 省略の仕方は少し変わっていて,

という規則にしたがいます.

これだけではわかりにくいと思われるので, 表9.2にいくつか例を示しておきます.

表 9.2: オプションの省略のしかた
省略する項目 記法
完全なオプションの指定 行刻み:ブロック刻み:初期行:初期ブロック:終了行:終了ブロック
終了ブロックを省略 行刻み:ブロック刻み:初期行:初期ブロック:終了行
終了行と終了ブロックを省略 行刻み:ブロック刻み:初期行:初期ブロック
終了行のみを省略 行刻み:ブロック刻み:初期行:初期ブロック::終了ブロック
初期ブロックと終了行を省略 行刻み:ブロック刻み:初期行:::終了ブロック
終了行以降を省略 行刻み:ブロック刻み:初期行:初期ブロック
終了行以降とブロック刻みをを省略 行刻み::初期行:初期ブロック
終了行以降とブロック刻み, 初期行を省略 行刻み:::初期ブロック
行刻み以外をすべて省略 行刻み
終了ブロック以外をすべて省略 :::::終了ブロック

オプションの最初あるいは途中に省略部分がある場合には記号「:」がいくつも続いて いることと, オプションを指定している部分の最後に記号「:」が付くことはないということを 確認して下さい.

では, 実際に 図9.22(a)に示されたデータファイル block-data.dat を使って, いくつかのグラフをプロットしてみましょう.

まず参考のために, どのデータ点も間引かれていないグラフをプロットしておきます.

  plot 'block-data.dat' pt 6 ps 2 [Enter]
とすると, 図9.23のような グラフが得られます.
図 9.23: データファイル block-data.dat の省略のないプロット
\includegraphics[scale=1]{EPS/gnuplot-2d-every-a-1.eps}

続いて,

  plot 'block-data.dat' every :::1 pt 6 ps 2 [Enter]
としてみます. これは, 「グラフを第1ブロックまでプロットする」という意味になります. 得られるグラフは図9.24のようなものに なります.
図 9.24: 終了ブロックを指定したデータファイル block-data.dat のプロット
\includegraphics[scale=1]{EPS/gnuplot-2d-every-a-2.eps}

さらに,

  plot 'block-data.dat' every :::2:3 pt 6 ps 2 [Enter]
としてみます. これは, 「第3ブロックまで, 各ブロックの番号2の行までをプロットする」 という意味になります. 結果として, 図9.25のようなグラフが得られます.
図 9.25: 終了行と終了ブロックを指定したデータファイル block-data.dat のプロット
\includegraphics[scale=1]{EPS/gnuplot-2d-every-a-3.eps}

続いて,

  plot 'block-data.dat' every 2:2 pt 6 ps 2 [Enter]
としてみます. これは, 「2個のブロックごとに1個のブロックを使う, 各ブロック内でも2個のデータ行ごとに1個のデータ行を使う」, すなわち1ブロック読むごとに1ブロック読み飛ばし, 各ブロック内部でも1行読むごとに1行読み飛ばすという意味に 解釈されます. 上記のコマンドを実行すると, 図9.26のようなグラフが得られます.
図 9.26: ブロックの読み飛ばしとブロック内の読み飛ばしを指定した データファイル block-data.dat のプロット
\includegraphics[scale=1]{EPS/gnuplot-2d-every-a-4.eps}

途中のデータブロックから描画を始める例も見ておきましょう.

  plot 'block-data.dat' every ::1:1:3:2 pt 6 ps 2 [Enter]
とすると, 「第1ブロック(2番目のブロック: 番号は0から始まっていることに注意) から第2番目のデータブロックまで, 番号1のデータ行から番号3のデータ行までを プロットする」という意味になります. これをプロットすると, 図9.27のようなグラフが得られます.
図 9.27: 途中から描画を始めたデータファイル block-data.dat のプロット
\includegraphics[scale=1]{EPS/gnuplot-2d-every-a-5.eps}


next up previous contents
: グラフのスタイルを変更する : 2次元データのプロット : データファイルのどの列を使ってプロットするかを変更する 目次
Shigeru HANBA 平成17年7月16日