|compphys|

Gnuplot FAQ


注:これは、佐藤@奈良先端大さんの許可を頂いた上で、 (目次から各項目に跳べるだけという、非常に安直な^^;)HTML 化を したものです。

---------- Gnuplot Frequently Asked Question and Answer ----------
---------- このファイルは、初心者向けのFAQファイルです。----------
---------- Gnuplot unix version 3.5 patchlevel 3 対応 ----------
---------- Version of this file is 1.2 (1994/4/28) ----------

質問、疑問、文句、意見などは以下のアドレスまでメールを書いて下さい。

tetu-s@is.aist-nara.ac.jp

このファイルはソフ研Copyleftです。つまり、作者の断りなしに他人に どんどんコピーしなければなりません。sectionの頭にアスタリスクがついて いるのは、emacsのアウトラインモードに対応させるためです。

######################################################################
* section 0 -- 目次
######################################################################

section 1 -- gnuplotそのものについて

1.1) gnuplotとは何ですか?
1.2) X windowでしか使用できませんか?
1.3) 計算機能はありますか?
1.4) GNUのプログラムですよね?
1.5) gnuplotはどうやったら手に入りますか?
1.6) 詳しいドキュメントはありますか?

section 2 -- gnuplotの実行

2.1) gnuplotを使うにはどうすれば良いのですか?
2.2) gnuplotを抜け出すにはどうすれば良いのですか?
2.3) コマンドをファイルに書いておき、一気に実行することはできますか?

section 3 -- グラフを描く

3.1) 関数のグラフ
3.1.1) 関数のグラフを表示するにはどうすればよいのですか?
3.1.2) 2つのグラフを重ねて描くことはできますか?
3.1.3) グラフの表示範囲を変えるには?
3.1.4) 3次元グラフを描くにはどうすればいいのですか?
3.1.5) 媒介変数関数のグラフを描けますか?
3.2) データーのグラフ
3.2.1) いくつかの点のデーターを打つにはどうすれば良いのですか?
3.2.2) データの大きさだけしか記録していないのですが?

section 4 -- グラフを出力する

4.1) グラフをプリンタに出力したいのですが?
4.2) グラフをTeXで使いたいのですが?

section 5 -- グラフの修飾、加工

5.1) 対数グラフは描けますか?
5.2) グラフを加工して手直ししたいのですが?
5.3) グラフに縦横の線を入れることができますか?

section 6 -- 計算機能

6.1) ちょっとした計算をするにはどうすれば良いですか?
6.2) 複素数はどう表せば良いのですか?
6.3) 自分で関数を定義するにはどうすれば良いのですか?


######################################################################
* section 1 -- gnuplotそのものについて
######################################################################

** 1.1) gnuplotとは何ですか?

gnuplotとは、対話的にグラフを書くプログラムです。グラフは、関数(x^2や sin(x)など)の他に、実験データーなどの離散的な数値も描くことができます。 また、2次元と3次元のグラフが描けます。

** 1.2) X windowでしか使用できませんか?

gnuplotは、X windowの他にも、Postscriptやキャラクタベースでも出力 できます。その他にもTeXのpicture環境フォーマットやfig形式、unixplot 形式など、様々な出力形式を選択できます。 また、Sunview、PC-9801などにも移植されています。

** 1.3) 計算機能はありますか?

CやBASIC、fortranなどの言語で使用できる式をそのまま入力できます。 また、複素数の計算もでき、三角関数からべっセル関数まで沢山の関数が 用意されている上に自分で関数の定義もできるので、関数電卓としても 使用できます。

** 1.4) GNUのプログラムですよね?

いいえ、gnuplotはプロジェクトGNUとは関係ありません。フリーソフト ウェアです。作者が、

本当は"newplot"にしたかったが、同名のソフトが存在したので "gnuplot"にした

と語っています。

** 1.5) gnuplotはどうやったら手に入りますか?

gnuplotは無料のソフトで、しかも有名なのでどこのannonymous FTPでも 手に入るでしょう。もしもFTPアクセスができなく、メールでお願いする 知合いもいないという人がいれば、

tetu-s@icsd4.tj.chiba-u.ac.jp

までメールを下さい。その時、compress+tar+uuencodeが良いか、 lha+uuencodeが良いかを明記してくれれば、折り返し分割して送ります。

** 1.6) 詳しいドキュメントはありますか?

gnuplotには、詳しいhelpコマンド、FAQ集の他にもTeXで50ページを越える ドキュメントがついてきます。また、その日本語版も存在します。 システムの管理者に質問すれば手に入ると思いますが、もしも日本語版の ドキュメントが無いと言われたら、私か翻訳者の

tamaru@keisu-s.t.u-tokyo.ac.jpさん

に連絡を取ると良いでしょう。


######################################################################
* section 2 -- gnuplotの実行
######################################################################

** 2.1) gnuplotを使うにはどうすれば良いのですか?

コマンドプロンプトが出ている状態で、

	% gnuplot
と打ち込んでみて下さい。何かメッセージが出て、プロンプトが
	gnuplot>
になったら、gnuplotが立ち上がりました。
	gnuplot: Command not found.
というメッセージが出たら、あなたのマシンにはgnuplotがインストールされて いません。

** 2.2) gnuplotを抜け出すにはどうすれば良いのですか?

例えば、

    gnuplot> quit
gnuplot> exit
のように、quitやexitと打ち込んで下さい。コントロールキーを押しながらDを 押してもいいかも知れません。

*** 2.3) コマンドをファイルに書いておき、一気に実行することはできますか?

バッチジョブを行なうには、ファイルにgnuplotの命令を、改行で区切って 書いておきます。

    例:
set title "Graph"
plot 2*x+1
そして、gnuplotを立ちあげて、loadコマンドを実行します。
    gnuplot> load "ファイル名"
すると、この例ではタイトルを"Graph"に設定し、y=2*x+1のグラフを描きます。


######################################################################
* section 3 -- グラフを描く
######################################################################

** 3.1) 関数のグラフ

*** 3.1.1) 関数のグラフを表示するにはどうすればよいのですか?

グラフを描くには、plotというコマンドを使います。2次元のグラフの場合、 plot の後にxを使った式を書きます。

最も簡単な例:

    gnuplot> plot x
こう打ち込むと、y=xの直線のグラフが表示されます。x-y軸の目盛も 自動的に適当に付加されます。 数式は、CやBASICなど幾つかの形式の式を入力できます。例えば、2次関数の グラフを書くには
    gnuplot> plot x**2
とすれば、y=x^2のグラフを描くことができます。

*** 3.1.2) 2つのグラフを重ねて描くことはできますか?

いくつかの関数のグラフを同時に描くには、plotコマンドでカンマで区切って 書きます。

    gnuplot> plot x,x**2
こうすれば、y=xとy=x^2のグラフが同時に表示されます。

*** 3.1.3) グラフの表示範囲を変えるには?

plotの最初の引数で与えます。

    gnuplot> plot [-10:20] x**2
こうすると、xを-10から20まで変化させた時のy=x^2のグラフが描かれます。 y軸の範囲を定めるには、x軸上の範囲の次に続けて書きます。
    gnuplot> plot [-10:20] [-10:200] x**2
*** 3.1.4) 3次元グラフを描くにはどうすればいいのですか?

splotというコマンドを使います。例えば、z=x+yのグラフを描くには

    gnuplot> splot x+y
と打ち込みます。

*** 3.1.5) 媒介変数関数のグラフを描けますか?

媒介変数による関数は、例えばx=f(t)、y=g(t)のように表されます。だから といって

    gnuplot> plot f(x),g(x)
などとやると、y=f(x)とy=g(x)の二つのグラフが重なっているものが表示さ れます。そこでプロットする前に
    gnuplot> set parametric
とすると、tを媒介変数とする媒介変数表示モードになります。そのあと
    gnuplot> plot f(t),g(t)
と打ち込むと、x=f(t)、y=g(t)のグラフが描かれます。例えば、次の例は 半径1の円を描きます。
    例:
gnuplot> set parametric
gnuplot> plot cos(t),sin(t)
** 3.2) データーのグラフ

*** 3.2.1) いくつかの点のデーターを打つにはどうすれば良いのですか?

まず、データーをファイルに書きます。例えば、試験回数と点数のデータが あるとします。データは、次のようにx,yの順で記録しておきます。

    1  43
    2  55
    3  39
    4  78
これをグラフにするには、
    gnuplot> plot "ファイル名"
ただし、デフォルトではデーターを点で取りますが、このような移り代わりを 表したデータは折れ線グラフで書きたいことがしばしばあります。 そのときは、オプションをつけます。
    gnuplot> plot "ファイル名" with line
*** 3.2.2) データの大きさだけしか記録していないのですが?

例えば、すぐ前の3.2.1)の成績のデータは、回数が連続しているので次のように 記録していても、行数を回数と見れば意味は分かります。

    43
    55
    39
    78
このようにファイルに記録されていると、gnuplotは行数をx座標と見て プロットしてくれます。(1行めはx=0、2行めはx=1、......) つまり、ほぼ3.2.1と同じグラフが出ます。 これは、大量のデータ(音声データなど)の推移をグラフ化したい時に役立ちま す。
    1
    9
    -1
    0
    4
    12
などというデーターをファイルに入れておき、
    gnuplot> plot "ファイル名" with line
とすると、データー遷移を折れ線グラフにしたものが出力されます。


######################################################################
* section 4 -- グラフを出力する
######################################################################

** 4.1) グラフをプリンタに出力したいのですが?

もしあなたがポストスクリプトプリンタを使用できるなら、グラフを描く前に 次のコマンドを実行して下さい。

    gnuplot> set terminal postscript
もしあなたがキャラクタベースのプリンタしか使用できないなら、次の コマンドを実行して下さい。
    gnuplot> set terminal dumb
そして、直接プリンターに送ることもできますが、とりあえず一度ファイルに グラフをセーブすることにしましょう。
    gnuplot> set output "ファイル名"
そのあとグラフを描きます。
    例:
    gnuplot> plot x**2
するとグラフは画面に出力されないで、ファイルに出力されます。あとは、 プリンターにリストを打ち出す要領で、ファイルを出力して下さい。
    例:
    % lpr "ファイル名"
** 4.2) グラフをTeXで使いたいのですが?

ポストスクリプトファイルを使う方法や、TeXの描画機能を使う方法などが 考えられます。もし取り込みたいグラフが簡単なものなら、次のコマンドを 実行して下さい。

    gnuplot> set terminal latex
もしも複雑なグラフを描きたいなら、代わりに次のコマンドを実行して 下さい。
    gnuplot> set terminal postscript
そして、一度ファイルに出力することにしましょう。terminalをlatexに したなら
    gnuplot> set output "ファイル名.tex"
postscriptにしたなら
    gnuplot> set output "ファイル名.ps"
と入力して下さい。そのあとグラフを描きます。
    例:
    gnuplot> plot x**3
あとは、出力ファイルを取り込む命令をTeXファイルに書きます。簡単な グラフの時は、次のような感じです。
    例:(TeXのソースリストの中で)
    \input{ファイル名.tex}
複雑なグラフの時(postscriptを使った時)は、次のような感じです。
    例:
    \documentstyle[epsf]{jarticle}
    \begin{document}
    \epsfile{file=ファイル名.ps,scale=0.5}
    \end{document}
postscriptを使うとグラフが横になってでるはずです。もしもグラフを 1ページに大きく出したいのではなく、文章の中に入れたいなら、横に ならないほうが良いでしょう。そういう時は、
    gnuplot> set terminal postscript portrait
と打ち込んでから、グラフを描いて下さい。


######################################################################
* section 5 -- グラフの修飾、加工
######################################################################

** 5.1) 対数グラフは描けますか?

実験観測データをグラフ化したい時に、対数グラフにしたいことは良くあり ます。

    gnuplot> set logscale 軸名
通常はx軸とy軸を両方対数スケールにすれば良いでしょうから、
    gnuplot> set logscale xy
とすればよいでしょう。x、yのどちらか片方でも構いません。

** 5.2) グラフを加工して手直ししたいのですが?

もしあなたがX windowのxfigなど、fig形式のグラフィックファイルを 扱えるグラフィックエディターを使えるのなら、次のように打ち込んで下さい。

    gnuplot> set terminal fig
    gnuplot> set output "ファイル名"
そしてグラフを描いた後、xfigなどを立ち上げて出力したファイルを読み、 加工して下さい。

そのほかのグラフィック形式については、

    gnuplot> set terminal
を参照して下さい。

** 5.3) グラフに縦横の線を入れることができますか?

グラフ用紙のように、グラフの目盛のところに水平垂直な線を入れるには、 グラフを描く前に次のコマンドを実行して下さい。

    gnuplot> set grid


######################################################################
* section 6 -- 計算機能
######################################################################

** 6.1) ちょっとした計算をするにはどうすれば良いですか?

    gnuplot> print sin(2.0/3.0*pi)
            0.866025
このように、printのあとに数式を書くと、結果を表示してくれます。

** 6.2) 複素数はどう表せば良いのですか?

    gnuplot> print {1,2}**2
            {-3.0, 4.0}
このように、{実部 , 虚部}と書きます。勿論、いくつかの関数の引数にも 使えます。
    gnuplot> print abs({2,4})
            4.47214
この場合、abs(a+ib)=sqrt(a^2+b^2)と定義されています。

** 6.3) 自分で関数を定義するにはどうすれば良いのですか?

    gnuplot> 関数名(引数) = 式

    例:
    gnuplot> f(x)=2*x+1
勿論、このユーザー関数を計算に使ったり、グラフを描いたりもできます。
    例:
    gnuplot> plot f(x)