next up previous contents
Next: 26.2 Errorbars Up: 26.1 Data-file Previous: 26.1.6 Thru

26.1.7 Using

最もよく使われるデータファイルの修飾子は using です。

書式:

     plot 'file' using {<entry> {:<entry> {:<entry> ...}}} {'format'}

もし、フォーマット (format) が指定されれば、C のライブラリ関数 'scanf' を 使ってデータファイルの各行をそのフォーマット文字列に従って読み込みます。 そうでなければ、行はスペースまたはタブの所で列に分割されて読み込まれます。 もし時系列フォーマットデータ (time-format data) を使っている場合は、 フォーマットを指定することはできません (これは set data time で行わ なければなりません)。

データは entry の指定に従った列に並び直されます。各 $<$entry$>$ には、 データを選び出すための単なる列の番号、カッコで囲まれた数式を指定するか、 あるいは何も指定しません。数式中では、最初の列の値を読み込むために $1、 2 番目の列の項目を使うために $2、といった書き方を使用できます。 また、column(x)valid(x) といったものも使うことができます。 ここで、x は結果として整数になる任意の数式です。column(x) は x 番目の データを返します。valid(x) は x 番目のデータが有効な値かをテストします。 列番号の 0 は、各点毎に 0 から始まる番号を表し、それは 2 行の空行が 来たところでリセットされます。列番号の -1 は 0 から始まるデータ行の 番号を意味します。これは 1 行の空行毎に 1 ずつ増加し、2 行の空行が来た ところでリセットされます。列番号の -2 は index を意味します。これは 2 行の空行が来たところで 1 ずつ増加します。$<$entry$>$ に何も書かなければ その entry のリストの順にデフォルトの値が使われます。例えば using ::4using 1:2:4 と解釈されます。

注: call コマンドも $ を特別な文字として使います。call の引数リスト の中に列番号を含ませる方法の詳細については call の項目を参照してくだ さい。

using にただ一つの entry を指定した場合はその $<$entry$>$ は y の値とし て使われ、データ点の番号が x として使われます。例えば "plot 'file' using 1""plot 'file' using 0:1" と同じ意味です。using に 2 つ の entry を与えた場合、それらは x, y として使われます。 さらに entry を追加すると、それらは x および/または y の誤差に使われます。誤差情報 を使った plot スタイルの詳細については set style を、そして、回帰曲 線法での誤差情報の使用については fit を参照してください。

'scanf' 関数では色々なデータ形式の数値入力が使えますが、gnuplot は 全ての入力データを倍精度浮動小数とみなしますから、gnuplot では lf が唯一の数値入力指定、ということになります。'scanf' は数と数の間に ホワイトスペース - 空白、タブ ("$\backslash$t")、改行 ("$\backslash$n")、または改ページ ("$\backslash$f") - があると期待します。それ以外の入力は明示的にスキップされる べきです。

"$\backslash$t", "$\backslash$n", "$\backslash$f" を使うときはシングルクォートよりむしろダブルクォートを 使うべきであることに注意してください。

例:

次の例は、1 番目のデータに対する 2 番目と 3 番目の和の値を plot します (書式文字列は、各列データがスペース区切りでなく、カンマ区切りであるこ とを指示しています)。

     plot 'file' using 1:($2+$3) '%lf,%lf,%lf'

次の例は、より複雑な書式指定でデータをファイル "MyData" から読み込み ます。

     plot 'MyData' using "%*lf%lf%*20[^\n]%lf"

この書式指定の意味は以下の通りです:


     %*lf        数値を無視
     %lf         倍精度浮動小数を読み込む (デフォルトでは x の値)
     %*20[^\n]   20 個の改行以外の文字を無視
     %lf         倍精度浮動小数を読み込む (デフォルトでは y の値)

3 項演算子 ?: を使ってデータをフィルタする一つの芸当を紹介します。


     plot 'file' using 1:($3>10 ? $2 : 1/0)

これは、1 列目のデータに対して、3 列目のデータが 10 以上であるような 2 列目のデータを plot します。1/0 は未定義値であり、gnuplot は未定 義の点を無視するので、よって適切でない点は隠されることになります

カッコで始まっていない限りは定数式を列番号として使うことができます。 例えば using 0+(複雑な式) の様なことができます。そして、その数式は、 カッコでスタートしていなければ数式の値が一度評価され、カッコでスタート していれば個々のデータ点を読み込むためにその値が一度評価される、という 点が重要です。

時系列フォーマットデータを使っている場合、その時間のデータは複数の列に 渡らせることができます。その場合、他のデータの開始位置を計算するとき、 時間のデータに空白が含まれていることに注意してください。例えば、データ 行の最初の要素がスペースが埋め込まれた時間データであるならば、y の値は 3 列目の値として指定されるべきです。

plot 'file'plot 'file' using 1:2、そして plot 'file' using ($1):($2) には微妙な違いがあることに注意してください。1) file が 1 列と 2 列のデータを持つ行をそれぞれ含んでいるとすると、データが 1 列 のみの行に対しては、最初のものは x の値を作り出し、2 番目のものはその 行は無視し、3 番目のものはそれを未定義の値として保存します (折れ線で plot している場合 (plot with lines)、その未定義の点を通過する線を結ば ないように)。2) 1 列目に文字列を含んでいるような行がある場合、最初の ものはエラーとして plot を中止しますが、2 番目と 3 番目のものはその 不要な行を読みとばします。

実際、最初に単に


     plot 'file' using 1:2

と指定することで、大抵の場合どんなにゴミのデータを含む行を持つファイル をも plot することが可能になります。しかし、どうしてもデータファイルに 文字列を残しておきたいならば、そのテキスト行の第一列にコメント文字 (#) を置く方がより安全でしょう。


next up previous contents
Next: 26.2 Errorbars Up: 26.1 Data-file Previous: 26.1.6 Thru
Shigeharu TAKENO
2003年 10月 21日