Newsgroup: fj.archives.answers Subject: gnuplot Frequently Asked Questions from beginners (FAQ) Followup-to: poster Reply-To: tetu-s@is.aist-nara.ac.jp Archive-name: gnuplot-faq-beginners Version: 1.3 ---------- Gnuplot Frequently Asked Question and Answer ---------- ---------- このファイルは、初心者向けのFAQファイルです。---------- ---------- Gnuplot unix version 3.5 patchlevel 3 対応 ---------- ---------- Version of this file is 1.3 (1998/7/9) ---------- 質問、疑問、文句、意見などは以下のアドレスまでメールを書いて下さい。 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) グラフに縦横の線を入れることができますか? 5.4) 二つのグラフに対し、異なるスケールで同時に表示ができますか? 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@sofken.com までメールを下さい。その時、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 ** 5.4) 二つのグラフに対し、異なるスケールで同時に表示ができますか? 二つのスケールの異なるグラフを同時にプロットしたいことがあります。 スケールの異なる、というのは、例えば f(x)=x**3, g(x)=sin(x) の二つを考えてみましょう。0 f(x)=x**3 gnuplot> g(x)=sin(x) gnuplot> plot f(x),g(x) とやっても、全然両グラフの概略が分からないと思います。 そこで小技を使い、 gnuplot> set parametric gnuplot> f(x)=x**3/100 gnuplot> g(x)=sin(x) gnuplot> plot [t=-6:6] t,f(t),t,g(t) とやると、一応両方のグラフの概略が書けます。 データがファイルに入っている場合は、もうそのままではgnuplotで 二つ以上のグラフを表示するのは非常に難しいです。 二つのグラフを出力してtgif等で重ね合わせるか、xmgrなどの別の フリーのグラフプロットソフトを使って下さい。 ###################################################################### * 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)