次のページ 前のページ 目次へ

18. plot

`plot` と `splot` の両コマンドは,このプログラムの主要なコマンドです. これらは,関数やデータを実に多くの方法で表示します.`plot` は2次元的 関数やデータを表示するために使い,`splot` は3次元面やデータを表示す るのに使います.

 書式:

        plot {範囲(ranges)} {<関数(function)> | 
                     {"<データファイル(datafile)>" {using ...}}}
                     {表題(title)} {スタイル(style)} 
                     {, <関数> {表題} {スタイル}...}

        splot {範囲} {<関数> | {"<データファイル>" {index i} {using ...}}}
                     {表題} {スタイル} {, <関数> {表題} {スタイル}...}

ここで,<関数>または,引用符に囲まれたデータファイル名を与えます. 媒介変数表示の場合には,関数は 2組(`plot`の場合) または 3組(`splot`の場合)の 数式です.ここでは,ユーザ定義関数や変数も利用可能です.

`plot` や `splot` コマンドは,

         plot sin(x)
や,
         splot x * y

のような簡単な場合もあるでしょうし,

  plot [t=1:10] [-pi:pi*2] tan(t), "data.1" using 2:3 with lines,
        t**2 with points

のように複雑にすることもできます.

18.1 data-file

ファイルに書かれた離散的なデータは,そのデータファイル名を引用符に囲 んで `plot` や `splot` コマンド中に書くことによって,表示させることが できます.データファイルには,1行に1つのデータ点が書かれていなけ ればなりません.# (VMSでは,!)で始まる行はコメントとして扱われ,無視 されます.`plot` に対しては,各データ点は (x,y) の組を表します. `splot` では,(x,y,z)です.エラーバー付きの `plot` ( plot errorbars`plot errorbars` 参照)では,各データ点は,(x,y,ydelta) または (x,y,ylow,yhigh) を表し ます.いずれの場合もデータファイル中の数字は,空白文字で区切られてい なければなりません.この空白文字によって,各行は列に区切られます.

`plot` コマンドについては,x の値を省略することができ,`splot` コマン ドについては,x, y の値を省略することができます. いずれのコマンドで も省略された値には,現在の座標値が使われます.この座標値は 0 から始ま り,1つデータを読み込む毎に 1 づつふえまえす.

それ以外の,入力書式を指定する場合については, plot errorbars<@@ref>date-filedatafile using`plot datafile using` を参照して下さい.

`plot` コマンドにおいて,データファイル中の空行は描画を中断させます. つまり,プロットスタイルが `lines` や `linespoints` だった場合 に,空行の前のデータと後のデータを結ぶ線は引かれません.( plot style`plot style` 参照)なお,これはデータを異なる線でプロットするようにプロット のスタイル自身を変更するものではありません.

次の例は,population.dat というファイルのデータと,理論曲線とを比較す るというものです:

         pop(x) = 103*exp((1965-x)/10)
         plot [1960:1990] 'population.dat', pop(x)

ここで,ファイル population.dat は,例えば次のようになっています:

         # Gnu population in Antarctica since 1965
         1965   103
         1970   55
         1975   34
         1980   24
         1985   10

ファイル中のデータをプロットするときには,`samples` と `isosamples` は無視されます.`plot` コマンドで描かれた曲線は,その曲線全体が収まる ように拡張されます.同様に,`splot` コマンドで描かれた格子状のデータ も拡張されます.この場合,各々の孤立した線(以後孤立線)は,空行 (CR/LF のみの行)で分離されているものと仮定しています.

明示していませんが,3次元のデータファイルには2種類あります.もしも, 全ての孤立線が同じ長さを持つならば,それは格子状のデータであるとして います.つまりデータが格子状のトポロジーを持つということです.データ が格子状であるときには,各孤立線を結ぶ横断線(i 番目の横断線は孤立線 の i 番目の点を,孤立線を与えた順に全て結んだものになります.)も引か れるようになります.(等高線を描く機能は格子状データにのみ有効である ことに留意しておいて下さい.)全ての孤立線が同じ長さを持つのでなけ れば,横断線は引かれず,また等高線を引くこともできません.

splot では,データファイルは1つ以上のメッシュ(mesh)を含んでいても 構いません.デフォルトでは全てのメッシュが描画されます.ファイルの中で, メッシュはお互いに,2つの空行で分離されています.複数のメッシュを含む ファイルから1つのメッシュを制御しsplotするには,index 修飾子を使って 下さい.詳しくは `splot index` を参照して下さい.

splot を使う際に,3次元のデータファイルと,using 書式 (`splot datafile using` 参照)によって z(高さ)のみを指定する場合は 非媒介変数表示モード(noparametric)を指定しなければなりません. 逆に,x, y, z 全てが与えられる場合は,パラメータによって張られた面を あらわすわけですから,媒介変数モードを指定して下さい (`set parametric` 参照).

3次元のデータファイルのによる簡単な描画例としては,

         set parametric
         splot 'glass.dat'
         set noparametric
         splot 'datafile.dat'

などが,挙げられるでしょう.ここで,datafile.dat は例えば:

         # Gnuの谷
         10
         10
         10

         10
         5
         10

         10
         1
         10

         10
         0
         10

などとなっています.ここで,このファイルは 3 × 4 の格子(3 点ずつの 孤立線が 4 本)をなしていることに留意して下さい.孤立線が空行によっ て区切られています.

UNIX などの popen の機能を持ったいくつかのシステムにおいては,データ ファイルはシェルコマンドによって実行されたプログラムからパイプ経由で 取り込むことができます.これは,ファイル名を '<' の文字で始めることに よって指定できます.例えば:

         pop(x) = 103*exp(-x/10)
         plot '< awk "{print $1-1965, $2}" population.dat', pop(x)

とすることによって,最初に挙げた人口の例を x 軸について 1965 年以降に 限ることができます.この例題を実行したければ,上のデータファイルから 全ての注釈を消去しなければなりません.あるいは,上のコマンドの(カンマより 前の)最初の部分の代わりに次のコマンドを用いる必要があります:

         plot '< awk "$0 !~ /^#/ {print $1-1965, $2}" population.dat'

また,"y" の値だけに単一の関数を適用することも出来ます.例えば,

         plot 'population.dat' thru p(x)

3次元描画についてのより詳しい情報は,`splot` を参照して下さい.

using

ファイル中のデータの書式は,`using` オプションで指定できます.明示的 に scanf の書式文字列を指定することもできますし,簡単に列選択のみの指 定をすることもできます.

 書式:

         plot "datafile" { using { <ycol> |
                                   <xcol>:<ycol> |
                                   <xcol>:<ycol>:<ydelta> |
                                   <xcol>:<ycol>:<ylow>:<yhigh> |
                                   <xcol>:<ycol>:<ylow>:<yhigh>:<boxwidth> }
                                 {"<scanf string>"} } ...

および,

        splot "datafile" { using { <xcol>:<ycol>:<zcol> | <zcol> }
                                  {"<scanf string>"} } ...
ここで,<xcol>, <ycol>, <zcol> は,スペースまたはタブによって区切られ た複数の列よりなるデータファイルにおいて,描画に使うデータの列を明示 的に指定することになります.`plot` において <ycol> のみが指定された場 合,<xcol> は,1 と仮定されます.`splot` において <zcol> のみが指定さ れた場合,ファイルからはその列だけが読み込まれます.<xcol> として 0 が指定された場合,<ycol> が座標番号(0, 1, ..)にたいして描画されます. <xcol>, <ycol>, <zcol> は,定数,式のいずれでも指定できます.

`plot` においてエラーバー(`plot errorbars` 参照)を使う場合, ydelta (例えば±の誤差)のデータを第3列におくか,ylow, yhigh のデータを 第3,4列におく必要があります.

`plot`において boxes または boxerrors を使う場合,棒の幅を指定するために 第5列を使うことができます.これは,たとえ,第3, 4列を使わなくても, 与えなければならないということを意味します.もし,3列のデータファイルから 棒グラフを描画したければ,次のコマンドを使って,ylowとyhighをyに設定します:

         plot "datafile" using 1:2:2:2:3 with boxes

scanf 文字列を指定すると,列指定はその順番以外は無視されます.つまり,

         plot "datafile" using 2:1 "%f%*f%f"

とすると,第1列が y ,第3列が x となります.

scanf 文字列が省略された場合は, 列指定(<xcol>:<ycol>(:<zcol>))に基 づいて設定されます.`using` オプションが指定されなかった場合は, `plot` に対しては "%f%f"(`errorbars` 付きの `plot` については "%f%f%f%f)が使われ,`splot` に対しては "%f%f%f" が使われます.

 例:

         plot "mydata" using "%*f%f%*20[^\n]%f" with lines

これで "MyData" から "%*f%f%*20[^\n]%f/" に従ってデータが読み込まれま す.この書式指定文字列の意味は: "%*f" によって最初の数が読みとばされ, "%f" によって次(2番目)の数が x として読み込まれます.続いて "%*20[^\n]" によって,最大 20 文字の改行文字でない文字が読みとばされ ます.最後に "%f" によって y が読み込まれます.

         n=3;
         plot "MyData", "MyData" using n

上のようにすると,GNUPLOT は "MyData" の第1列に対して,第2,3列を 描画します.ここで 'n=4; replot' を実行すると,第1列に対して,第2, 4列を描画します.

         splot "glass.dat" using 1

このようにすると,GNUPLOT は "glass.dat" の各行の最初の数を z 座標と して描画します.このとき各行のその他の項目は無視されます.

注意: GNUPLOT は,データファイルからバッファーにまず1行読み込み,

         sscanf(input_buffer, scanf_string, &x, &y{, &z});

としています.ここで,'x', 'y', 'z' は,単精度浮動小数型(float)で す. 2 つ(`splot` の時は3つ,`errorbars` の時は 3 または 4 つ)の単精 度浮動小数型を指定する任意の文字列が scanf 文字列として使用できます.

18.2 errorbars

エラーバーは,2次元データのファイルにおいて,ydelta を指定する1つ, またはylowとyhighを指定する2つの追加列を読み込むことによって実現され ます.x 軸方向のエラーバーや `splot` 用のエラーバーはサポートされてい ません.

通常,GNUPLOT はデータファイルの各行に,(x, y, ydelta) の 3 つか,(x, y, ylow, yhigh) の 4 つの数値があるものとして動作します.x 座標は必ず 指定しなければなりません.各数値を書く順序も上で挙げた通りでなくては なりません.この書式に従うデータファイルは次のようにして簡単にエラー バーつきのグラフにすることができます.

         plot "data.dat" with errorbars

エラーバーは,(x, ylow) から (x, yhigh) への鉛直な線として描かれます. もしも ylow と yhigh の代わりに ydelta が指定されたときは,ylow = y - ydelta,yhigh = y + ydelta となります.もしもある行に2つしか数がなかっ た場合には,ylow と yhigh はともに y となります.データの各点を結ぶ線 を引きたい場合は,with errorbars と with lines を指定して,同じデータ ファイルを 2 回 `plot` して下さい.

y autoscaling が on のときは,エラーバーが収まるように y の範囲が調整 されます.

データファイル中の各列がどのように x, y, ydelta, ylow, yhigh に代入さ れるかを `using` オプションで指定することができます.x の列は必ずなく てはなりませんし,x, y は共にエラーバーのデータより前になくてはなりま せん.3 つの数値がある行については,それらは x, y, ydelta であるもの とされます.4 つの数値がある行については,それらは x, y, ylow, yhigh であるものとされます.

 例:

         plot "data.dat" using 1:2:3:4 with errorbars
         plot "data.dat" using 3:2:6 with errorbars
         plot "data.dat" using 3:4:8:7 with errorbars

最初の例では,x, y, ylow, yhigh をそれぞれ第 1, 2, 3, 4 列から読み込 みます.これは何も指定しなかった場合と同じです.2 番目の例では,x を 第 3 列から,y を第 2 列から,ydelta を第 6 列から読み込みます.3 番 目の例では,x を第 3 列から,y を第 4 列から,ylow を第 8 列から, yhigh を第 7 列から読み込みます.

`plot using` と plot style`plot style` の各項目もあわせて参照して下さい.

18.3 parametric

媒介変数モード(parametric mode)にあるとき(`set parametric`)には,数式は `plot` については2つ組,`splot` については3つ組で与えられなくては なりません.すなわち

         plot sin(t),t**2
         splot cos(u)*cos(v),cos(u)*sin(v),sin(u)

という具合です.

データファイルは通常通りに描画されます.ただし,ファイル名が指定され るより前にある媒介変数表示関数は,完全な形で指定されていなくてはなり ません.つまり,x の媒介変数表示関数(上の例では sin(t) )と y の関数 (上でのt**2 )の間には,いかなるオプションもデータファイル名もあっては なりません.もし,そのようなものがあった場合は,媒介変数表示関数が完 全に指定されていないという文法エラーとなります.

範囲指定(range)は媒介変数モードでは違った意味を持ちます.`plot` コマ ンドにおける最初の range は `trange` となります.次に `xrange`,最後 に `yrange` となります.`splot` においては `urange`, `vrange`, `xrange`, `yrange`, `zrange` の順になります.次の例は,`trange` を [-pi:pi] に,`xrange` を [-1.3:1.3] に,`yrange` を [-1:1] に設定して `plot` するものです.

         plot [-pi:pi] [-1.3:1.3] [-1:1] sin(t),t**2

`with` や `title` などのオプション類は,媒介変数表示関数が完結してからのみ 指定できます.

         plot sin(t),t**2 title 'Parametric example' with linespoints

18.4 ranges

range オプションはグラフの表示される領域を指定します.

範囲(range)は,`plot` や `splot` のコマンドラインで指定することによっ てその描画のみに影響させることも,`set xrange`, `set yrange` などでそ れ以降のデフォルトの値を変更することもできます.

 書式:
         [{<仮変数> =} {<xmin> : <xmax>}] { [{<ymin> : <ymax>}] }

ここで <仮変数> は独立変数(デフォルトでは x と y ですが,`set dummy` で 変更可能です)で,min と max の項は定数式です.

min と max の項は共に省略可能です.min, max のいずれも指定されなかっ た場合には,':' も省略可能です.つまり,空の領域指定として,'[ ]'が許 されます.

`plot` コマンドにおいて範囲を指定すると,その軸についての自動範囲指定 (autoscale)がオフになります.`set` による範囲指定を行った場合も,それ 以降,変更するまでの間,その軸についての自動範囲指定がオフになります. ( set autoscale`set autoscale` 参照)

 例:

 現在のデフォルトの範囲を使います:
         plot cos(x)

 x の範囲のみ指定します:
         plot [-10:30] sin(pi*x)/(pi*x)

 上と同じですが,仮変数として t を使います:
         plot [t = -10:30]  sin(pi*t)/(pi*t)

 x, y 両方の範囲を指定します:
         plot [-pi:pi] [-3:3]  tan(x), 1/x

 y の範囲のみを指定し,両方の自動範囲指定をオフにします:
         plot [ ] [-2:sin(5)*-8] sin(x)**besj0(x)

 xmax と ymin のみ指定します:
         plot [:200] [-pi:]  exp(sin(x))

 x, y, z 全ての範囲を指定します:
         splot [0:3] [1:4] [-1:1] x*y

18.5 index

複数のメッシュデータを含むファイルのsplotは,index修飾子で制御することが できます.データファイルには1つ以上のメッシュデータを含めることができ, その場合はデフォルトではそのファイルの中の全てのメッシュがsplotされます. ファイルの中で,メッシュはお互いに2つの空行によって分離されています. 複数のメッシュを含むファイルから単一のメッシュをsplotするには,index修飾子を 使ってどのメッシュをsplotするか指定します.最初のメッシュはメッシュ0です.

 例:

       splot "data1" index 2 with points

これは,pointsでファイルdata1の3番目のメッシュをsplotします.

18.6 style

グラフの表示方式には,`lines`, `points`, `linespoints`, `impulses`, `dots`, `errorbars`, `steps`, `boxes`, `boxerrorbars` の9種類があります. `line` は隣合う点を線でつなぎます. `points` は各点の位置にマークを描きます. `linespoints` は `lines` と `points` の両方を行います. `impulses` ではx軸(splotにおいては底面)からの垂線を引きます. `dots` では各点の位置に小さな点を打ちます.これは,多くの点の散布図に 便利です.

`errorbars` は2次元でのデータファイルからのグラフでのみ利用できます. `splot` や関数の `plot` で指定すると `points` を指定したものとします. データファイルよる `plot` では,`errorbars` は,鉛直なエラーバーが引 かれることを除いては,`plot` の様に振舞います.つまり,各点 (x,y) に 対して,(x,ylow) から (x,yhigh) への線が引かれることになります.エラー バーの両端はくさび型になっています.ylow と yhigh の値は,データファ イルから `using` オプションに従って読み込まれます.より詳しい情報は, plot errorbars`plot errorbars` を参照して下さい.

`boxes` は2次元のグラフでのみ利用できます.また,`boxerrorbars` と呼ばれる 別のスタイルも,2次元のデータファイルからのグラフでのみ利用できます. このスタイルは `boxes` と `errorbars` スタイルの組合せです. `boxes` スタイルは,与えられたx座標を中心とし,x軸から与えられたy座標までの 棒を描きます.棒の幅は3つの方法のうちのいずれか1つで得ます.1番目の方法と しては,もし,データファイルが第5列目を有していれば,これを棒の幅として 使います.`boxerrorbars`の場合,3, 4列目は必要ですが,この時は無視されます. 2番目の方法としては,`set boxwidth` コマンドを使って幅がすでに設定されている 場合は,これが使われます.それ以外の場合には,隣り合う棒と接するように 各々の棒の幅が自動的に計算されます.

`step` は2次元のグラフでのみ利用できます.このスタイルは連続する 点を2つの線分で結びます: 1つめは (x1, y1) から (x2, y1) 2つめは (x2, y1) から (x2, y2) です.

デフォルトの線種は `set function style` と `set data style` で指定で きます.

デフォルトでは,各々の関数やデータファイルは,可能な限り異なる線種や点種を 持ちます.全ての端末装置は最低でも 6 種類の点種を持っていて,それを越 えると順に再使用されます.LaTeX ドライバはさらに 6 つの点種(いずれも 円の変種です)を持っているので,12 のグラフが描かれた後にのみ同じもの が使われます.

必要ならば,グラフ毎に表示方式とその線/点種を指定することができます.

 書式:

         with <表示方式> {<線種> {<点種>}}

ここで,<表示方式> は,`lines`, `points`, `linespoints`, `impulses`, `dots`, `steps`, `errorbars` の中のいずれかです.<線種> と <点種> は 正整数を表す定数または式で,その描画の線や点の種類を指定します. 線種 1 はデフォルトで最初に使われる線種で,線種 2 は,2番目に使われる ものです.以下同様に指定できます.

例:

 sin(x) を鉛直線で描画します:
         plot sin(x) with impulses

 x*y を点で描画し,x**2 + y**2 をデフォルトの方式で描画します:
         splot x*y w points, x**2 + y**2

 tan(x) を関数のデフォルトの方式で,"data.1" を折れ線で描画します:
         plot [ ] [-2:5] tan(x), "data.1" with l

 "leastsq.dat" を鉛直線で描画します:
         plot 'leastsq.dat' w i

 データファイル 'population' を矩形で描画します:
         plot "population" with boxes

 "exper.dat" をエラーバー付きおよび折れ線で描画します:
         plot 'exper.dat' w lines, 'exper.dat' w errorbars

 ここで 'exper.dat' は 3または4個の列を持っている必要があります.

 x**2 + y**2 と x**2 - y**2 を同じ線種で描画します:
         splot x**2 + y**2 with line 1, x**2 - y**2 with line 1

 sin(x) と cos(x) を折れ線およびマーカーで描画します.折れ線は同じ線種で
 すがマーカーは異なったものを使います:
         plot sin(x) with linesp 1 3, cos(x) with linesp 1 4

 "data" を点種 3 で描画します.
         plot "data" with points 1 3 

ここで点種を指定するためには,例え線を使わなくても線種を必ず指定しな ければならないことに留意して下さい.この例では,線種 1 と点種 3 を 指定していますが,線種は意味を持ちません.

デフォルトの表示方式の変更方法については,`set style` を参照して下さい.

18.7 title

各グラフの表題はキー欄の中に現れます.デフォルトでは plot コマンドで用いた 関数式またはファイル名が表題として使われますが,`title` オプションを 使うことによって変更できます.このオプションは `with` オプションより も前になくてはなりません.

 書式:
         title "<表題>"

ここで <表題> はグラフの表題です.この文字列は引用符で囲まれていなけ ればなりません.キー欄にはこの引用符は表示されません.

 例:

 y=x を 'x' という表題で表示します:
         plot x

 "glass.dat" というファイルを '回転体の表面' という表題で表示します:
         splot "glass.dat" title '回転体の表面'

 x の自乗を表題 "x^2" で,"data.1" を表題 '測定データ' で表示します:
         plot x**2 title "x^2", "data.1" t '測定データ'
plot や splot において,"notitle" オプションをでキー欄から表題を 省略することができます.いくつかの曲線を飾りのために単独に描く場合に 便利です.例えば,ある人が極座標描画で円周の縁が必要な場合には,
 例:
        set polar
        plot my_function(x), 1 notitle

と書く.これは "my_function" に対するキーの見出しを作るが,"1" に対しては 作らない. poldat.dem の例を参照して下さい.


次のページ 前のページ 目次へ