next up previous contents
: データを間引く : 2次元データのプロット : 複数のグラフが含まれるデータファイルからグラフを抜き出す 目次


データファイルのどの列を使ってプロットするかを変更する

この節ではデータファイルのどの列を使ってプロットするかを変更する 方法について説明します.

説明のために, 図9.15のような ファイルを考えます. このファイルには,

multi-data.dat
という名前がついているものとします. このデータの第1列, 第2列, 第3列の値は それぞれ$ x$, $ \sin x$, $ \cos x$になっています.
図 9.15: ファイル multi-data.datの内容
\includegraphics[scale=1]{EPS/6-file.eps}

さて, 図9.15に示された ファイル multi-data.dat を使い,

  plot 'multi-data.dat' with lines [Enter]
というコマンドによりグラフをプロットすると, 図9.16のような グラフが得られます.
図 9.16: ファイル multi-data.datを単純にプロットした結果
\includegraphics[scale=1]{EPS/gnuplot-data-using-1.eps}
ファイル multi-data.dat の第1列を横軸, 第2列を縦軸に取ったグラフがプロットされているわけです.

では, 第1列と第3列を使って, $ \cos x$のグラフがプロットできる ようにするにはどうしたらよいでしょうか?

このためには, コマンド plot に using というキーワードを付けて実行します.

キーワード using がついたコマンド plot の基本的な構文は,

  plot 'ファイル' using 横軸に使う列の番号:縦軸に使う列の番号 [Enter]
です. ここに, 「横軸に使う列の番号」と書かれた部分と 「縦軸に使う列の番号」と書かれた部分には, それぞれ データファイル中で描画に使いたい列の番号を書きます. ただし, データの最初の列が第1列になります.

例題として, ファイル multi-data.dat の第1列と第3列 を使ってグラフを描いてみましょう. ただし, グラフを見やすくするために, コマンド plot にwith lines というキーワードを付け, データ点のあいだを線で結んでおくことにします.

  plot 'multi-data.dat' using 1:3 with lines [Enter]
というコマンドを実行すると, 図9.17に示すように, 希望通り $ \cos x$のグラフがプロットされます.
図 9.17: ファイル multi-data.datの第1列と第3列を使ってプロットした結果
\includegraphics[scale=1]{EPS/gnuplot-data-using-2.eps}

もうひとつの例題として, 横軸にファイル multi-data.dat の第2列, 縦軸に第3列を取ったグラフを描いてみましょう. ただし, この場合は, 横軸が$ \sin x$で縦軸が$ \cos x$なので, 描画結果が円になることがわかってます. ですから, あらかじめ グラフの縦と横を一定にするコマンド set size ratio -1 を 実行しておくことにします.

  set size ratio -1 [Enter]
  plot 'multi-data.dat' using 2:3 with lines [Enter]
というコマンドを実行すると, 図9.18に示すように, 円が描画されます. ただし, サンプルの数が少ないのと, データファイルをプロットするときには標準では標本点のあいだは 直線で結ばれるので, 描画結果はやや角張ってしまっています.
図 9.18: ファイル multi-data.datの第2列と第3列を使ってプロットした結果
\includegraphics[scale=1]{EPS/gnuplot-data-using-3.eps}

実は, キーワード using にはもうすこし高級な使い方があります. これについて説明するためには, gnuplotが読み込んだデータをどのようにして解釈するかについて もう少し詳しく見ておく必要があります.

キーワード

using m: n
を使うときには, mおよびnにはデータの列の番号が入る (最左端が1列目と数える)のですが, この部分に数0を指定することもできます. 列の番号として0が指定された場合, gnuplotは, 第0列目として0,1,2,3,...というふうに続く整数を自動的に補います.

さらに, 第mの実際に読み込まれたデータを, 「 $ {\it m}」という記号で参照
することができます. そして, 「$m」という記号を関数の引数として使うことができます. ですから,

plot 'ファイル' using m:(関数($m)) [Enter]
とすると, 横軸を指定されたデータファイルの第m列に, 縦軸を指定されたデータファイルの第n列に関数を作用させたものに 取ったグラフが描画されます. ここに, 「ファイル」と書かれた部分には 適当なファイルの名前が, 「関数」と書かれた部分には gnuplot に 用意されている数学関数かユーザが自分で定義した関数が入ります. 「(関数($m))」のように全体を括弧「( )」で囲う必要があることに 注意して下さい.

いくつか例を見てみましょう.

まず, キーワード using で列0を指定した場合の例を見ます.

  plot 'multi-data.dat' using 0:2 with lines [Enter]
というコマンドを実行すると, 図9.19に示すような グラフが得られます.
図 9.19: ファイル multi-data.datの第0列と第2列を使ってプロットした結果
\includegraphics[scale=1]{EPS/gnuplot-data-using-4.eps}
このグラフの形は図9.16と同じですが, 横軸の目盛りが違います. この違いがどこから来ているかというと, 図9.16では 横軸の数値としてファイル multi-data.dat (図9.15)の 第1列目が使われているのに対し, 図9.19では横軸の数値として 0,1,2,...が使われていることから 来ています.

次に, 「$n」という記号を使った例を見ます. 横軸をファイル multi-data.dat の第1列目に, 横軸をファイル multi-data.dat の第1列目に関数 sqrt (平方根を取る関数)を作用させた結果に 取ったグラフを表示してみます. この場合, 「第1列目に関数 sqrt を作用させた結果」は

(sqrt($1))
のように記述されます. 「sqrt($1)」と書かれた部分を括弧で囲む必要があることを に注意して下さい.

では例を見てみましょう.

  plot 'multi-data.dat'  using 1:(sqrt($1)) with lines [Enter]
というコマンドを実行すると, 図9.20を のようなグラフが得られます. この例の場合, グラフの横軸が ファイル multi-data.datの第1列に, 縦軸が ファイル multi-data.datの第1列に関数 sqrt を作用させたものになっています.
図 9.20: ファイル multi-data.datの第1列を横軸に, それに関数 sqrt を作用させたもを 縦軸に取ったグラフ
\includegraphics[scale=1]{EPS/gnuplot-data-using-5.eps}


next up previous contents
: データを間引く : 2次元データのプロット : 複数のグラフが含まれるデータファイルからグラフを抜き出す 目次
Shigeru HANBA 平成17年7月16日