21
GNUPLOT による グラフ 2008 3 15 概要 UNIX Microsoft-Windows GNUPLOT バージョン 4 って をグラフにす する。 いてある GNUPLOT して がら むこ きる。 データ について てあるが、バッチ か他 プログラム データ よう ある。 目次 1 GNUPLOT とは 2 2 実行方法 3 2.1 UNIX .......................................... 3 2.2 Windows ........................................ 4 2.3 コマンドプロンプト .................................. 4 3 GNUPLOT の操作 4 3.1 ディレクトリー .................................. 4 3.2 コマンド ...................................... 5 3.3 ......................................... 5 3.4 ........................................... 6 3.5 ......................................... 6 3.6 ....................................... 7 3.7 コマンドヒストリー .................................. 7 3.8 オンラインヘルプ .................................... 7 ............................................. 8 4 グラフのデモンストレーション 8 5 関数グラフの描きかた 8 5.1 ......................................... 8 5.2 グラフ ..................................... 10 ............................................. 10 1

GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

GNUPLOT による関数グラフの作り方

2008 年 3 月 15 日

概 要

UNIX 版と Microsoft-Windows 版の GNUPLOT バージョン 4 を使って関数をグラフにする方法を説明する。 具体的に書いてあるので実際に GNUPLOTを操作して試しながら読むことができる。 数値データの解析についても述べてあるが、バッチ処理とか他のプログラムとのデータ交換のようなことはこの文書の範囲外である。

目 次

1 GNUPLOTとは 2

2 実行方法 3

2.1 UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.3 コマンドプロンプト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 GNUPLOTの操作 4

3.1 作業ディレクトリー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.2 コマンド入力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.3 数学関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.4 変数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.5 関数定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.6 名前の種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.7 コマンドヒストリー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.8 オンラインヘルプ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7練習問題. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 グラフのデモンストレーション 8

5 関数グラフの描きかた 8

5.1 基本操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85.2 グラフの仕上げ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10練習問題. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1

Page 2: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

6 グラフの出力 11

6.1 印刷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116.2 ファイルへの出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116.3 各種出力形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

7 いろいろなグラフ 13

7.1 重ね合わせグラフ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137.2 対数グラフ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147.3 パラメトリック関数のグラフ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157.4 極座標表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

8 2変数関数 17

8.1 メッシュによる3次元グラフ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178.2 カラーマップ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188.3 等高線 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

9 数値データの処理 20

図 目 次

1 GNUPLOT操作中の画面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 MS-Windows 版 GNUPLOT のアイコンの例 . . . . . . . . . . . . . . . . . . . . 43 y = x2 − 2x のグラフ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 振動子の応答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 振動子の応答 (両対数目盛) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 パラメトリックプロット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 惑星の軌道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 2変数関数のプロット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 カラープロット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1910 2変数関数の等高線プロット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2011 関数のデータへの適合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

1 GNUPLOTとは

GNUPLOTはグラフを描くプログラムです。グラフの作成に必要な範囲に機能を絞ってあるので、いろいろな機能を含んでいる大きい複雑なプログラムに比べて理解しやすく、操作が簡単で高

速です。 GNUPLOTの機能を大雑把に言えば次のようになります。

• 与えられた 1変数または2変数の式からグラフを作る。

• 与えられた数値データからグラフを作る。

• 多種の装置やデータ形式への出力を行う。

• モデル関数をデータに適合させる。

2

Page 3: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

当然、式の値を計算したり計算結果や式を憶えておく機能もあるので、普通の関数電卓としても

利用することができます。しかも復素数の関数の計算までできます。作ることのできるグラフの

種類はそれほど豊富ではなくパイチャート (円グラフ)や凝った絵グラフのようなものは作れませんが、技術系の地味な用途での要求は満たします。いろいろな形式でデータを出力できることは

GNUPLOT の大きな特徴で、そのことによって、GNUPLOT で作ったグラフを TEXや各種のワープロなど他のプログラムで取り込んで利用することがかなり自由に行えます。「適合」という

のはいわゆる fitting で、測定データに合わせて理論曲線を調節して描く機能です。その他、操作の結果を保存する機能やバッチ処理(自動運転)の機能もあり、複雑な作業を行う

場合の助けになります。マニュアルは印刷したものを読むこともできますし、オンラインマニュア

ルとして読むこともできます。GNUPLOTに関する日本語の情報はインターネット上に多数あります。

2 実行方法

2.1 UNIX

UNIX に関しては通常の X 環境での操作を想定します。その場合、kterm か何かの端末ウィンドウを開き、そこで次のようなコマンドを打ち込んで GNUPLOT を起動します。

% gnuplot

左端の% は UNIX シェルのコマンドプロンプトのつもりです (シェルのコマンドプロンプトは設定によって異なります。)。キーボードから入力するのはこれを除いた部分です。 起動コマンドを入力した端末ウィンドウ内で引続きGNUPLOT との対話セッションが行われますが、グラフを描こうとするとグラフ用のウィンドウが別に開いてそこにグラフが表示されます。 図 1 はその様子です。 グラフを表示するウィンドウは一つだけで、別のグラフを描くときにもこのウィンドウが再

利用されます。

図 1: GNUPLOT操作中の画面

3

Page 4: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

2.2 Windows

Windows では、コマンドではなく GUI を使った操作でアプリケーションを起動しますが、コンピューターの設定がどうなっているかによって具体的な方法は異なります。デスクトップ画面の中

に GNUPLOT のアイコンが置いてあるかも知れませんし、プログラムマネージャーやスタートメニューの中を探す必要があるかもしれません。GNUPLOTのアイコンやメニューにはWgnuplotとか GNUPLOT for Windowsというような名前が使われているかもしれません。図 2は GNUPLOTを起動するアイコンの例です。GNUPLOT が起動すると、 GNUPLOT との対話セッションに使うウィンドウが新たに開かれます。これ以後の操作は UNIX と同様です。

図 2: MS-Windows 版 GNUPLOT のアイコンの例

2.3 コマンドプロンプト

GNUPLOT が動き出すと、UNIX の場合でも Windows の場合でも、GNUPLOT のバージョン情報などの表示に続いて次のようなプロンプトが表示されます。

gnuplot>

ユーザーはこのプロンプトに対してコマンドなどを入力して GNUPLOT を操作します。たとえば、pwd と打ってみてください。すると、GNUPLOT のカレントディレクトリーが表示されます。これは GNUPLOT がファイルの読み書きを行う場所です。

GNUPLOT を終了させるには quit または exit と打ちます。UNIX の場合は、グラフィックスのウィンドウが開いていればそれが閉まり、シェルのプロンプトが復活します。Windows ではGNUPLOT のウィンドウがすべて閉まるだけです。

3 GNUPLOTの操作

3.1 作業ディレクトリー

実際にGNUPLOTで作業を行うために、まず作業を行うためのディレクトリーを作りましょう。UNIX では、たとえば、端末ウィンドウで、

% mkdir ~/gplot

% cd ~/gplot

% gnuplot

のように入力します。これで、ホームディレクトリー (~であらわされる) の下に gplot という

名のディレクトリーができ、そこをカレントディレクトリーとして GNUPLOT が起動します。GNUPLOT の中で pwd と打つと、GNUPLOT がどこをカレントディレクトリーとして認識しているかを確かめることができます。GNUPLOT の中でカレントディレクトリーを変更するコマン

4

Page 5: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

ドは cd です。このコマンドにはクォーテーションマークで囲んだディレクトリー名を続けて入力

します。

もし、ディレクトリーについて理解できないし理解したくもないという場合は、ホームディレク

トリーになんでもかんでも保存するしかありません。この場合は

% cd

% gnuplot

と打ってください。gnuplot と打つ前に cd と打つのは、確実にホームディレクトリーを使うよう

にするためです。

Windows の場合は、まず、デスクトップかマイドキュメントのようなわかりやすい場所に作業フォルダーを作ります。これはマウス操作によっておこなえばよろしい。GNUPLOT の中では、ChDirボタンを押し、あらかじめ作っておいた作業フォルダーを選びます。

3.2 コマンド入力

GNUPLOTに対するコマンドはすべてキーボードを打って入力することができますが、Windows版ではメニューやボタンを併用することもできます。たとえば 1 + 2 という式の値を表示するには

gnuplot> print 1+2

のように打って Enter キーを押します (左端の gnuplot> という部分は GNUPLOT のプロンプト) が、 Windows 版なら Expressions メニューの Evaluate を使って print の部分を入力するこ

ともできます。 続けてキーボードで 1+2 と打って Enter キーを押せば完了です。 コマンドの綴りを覚えていてキーボードから入力するのが最も能率的ですが、ほとんどのコマンドがメニューか

らも入力できるようになっているので、英語の綴りを忘れていてしかもマニュアルを見るのが嫌な

場合ても大丈夫。数式で使う演算記号の一部や関数記号もメニューから入力することができます。

演算記号は Expressions メニュー、関数は Functions メニューにあります。GNUPLOT に与えるコマンドはすべて上の例の print のような動詞から始まる命令文か、変数

に値をセットする代入文です。 扱うことのできる数値データは整数か実数か複素数ですが、グラ

フのラベルやファイル名などには文字列が使えます。式は四則演算と関数を含むことができます。

なお、整数どうしの割算の結果は余りが出る場合でも整数になります。通常の計算ではこれは困

ります。たとえば、9/4 は 2 になってしまうのです。しかし、9.0/4 とか 9/4.0 とするとちゃんと2.25 になります。このように、小数点を付けないと期待した結果にならないかもしれないので気を付けましょう。

3.3 数学関数

GNUPLOTでは三角関数や指数関数のような基本的な関数を使うことができます。関数の引数は

gnuplot> print sin(3.14)

のように、いつでも括弧で囲む必要があります。

gnuplot> print log(exp(1.0)**2)

のように、括弧の中に複雑な式を書くこともできます。数学関数には次のようなものが含まれます。

5

Page 6: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

sqrt (平方根)、cos、tan、abs (絶対値)、atan (Arctan)、floor (切り捨て)、tanh、besj0 (Bessel関数)、gamma (Γ関数)

3.4 変数

同じ数値や式を繰り返して入力する代わりに,次のように変数を使うことができます。

gnuplot> kekka = sin(3.14) + 1

gnuplot> print kekka

1.00159

gnuplot> print - kekka

-1.00159

kekka のように変数名を自分で勝手に作って使いますが、使える文字は英字と (アンダースコア)および数字です。ただし名前の先頭の文字には数字は使えません。アンダースコアはどこに用いて

もよいのですが、the_mass_of_electronのように複数の英単語を集めて 1つの名前にするような場合に役立ちます。大文字・小文字は区別されるので、kekka と Kekka は別物とみなされます。

kekka の値は今 1.00159 ですが、 kekka=0.5 のように後から違う値を代入することもできます。

違う値を代入すると前の値は無くなります。 つまり、変数は最も新しく代入した値だけを憶えて

います。

3.5 関数定義

関数も自前で定義して使うことができます。関数名は変数名と同じ規則で作ります。次の例で

は、始めの 2行で関数を 2つ定義し、定義した関数を使って計算しています。(プロンプトの右側だけがオペレーターの入力です。)

gnuplot> f(x) = x**2.0 - 2.0*x

gnuplot> g(x,y) = x**2 - y**2

gnuplot> print f(3.0)

3.0

gnuplot> print g(2.0, 1.0)

3.0

gnuplot> print g(1.0, 2.0)

-3.0

* は掛け算、 ** はべき乗の演算記号です。始めの行は f(x) = x2 − 2x、という 1 変数の関数、2番目の行は g(x, y) = x2 − y2 という 2 変数の関数を定義しています。上の print コマンドで表示される結果が自分でも予測できれば理解できたことになりますが、どうですか?キーポイントは、

x や y のような定義で使った引数(仮引数という)と、1.0 や 2.0 や 3.0 のような実際に計算するときに与える引数(実引数という)との対応の規則にあります。

変数に式の値を代入するときと関数を定義するときに与えるコマンドは、動詞が無くいきなり変

数名や関数名から始まることに注意してください。 = が動詞の役割をしていると解釈してもよいでしょう。 他の場合はすべて実際に動詞から始まります。

6

Page 7: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

3.6 名前の種類

名前は今までに変数名、 関数名、 コマンドの動詞として出てきました。GNUPLOT は名前が変数名なのか関数名なのかそれともコマンドの動詞なのかをコマンド中での前後関係から判断する

ようになっています。

gnuplot> sin = 12345

gnuplot> print sin(3.14)

0.00159265

gnuplot> print sin

12345

このように、名前は括弧があるかどうかで関数として解釈されたり変数として解釈されたりしま

す。コマンドの動詞については次の例でわかるとおりです。

gnuplot> print = 123

gnuplot> print 456

456

gnuplot> print print

123

しかし、別のものに同じ名前を使うのは間違いの元になりますしメリットも無さそうです。した

がって上のは悪い例です。

3.7 コマンドヒストリー

さて、 同じようなコマンドを繰り返して実行したい場合には前に入力したコマンドを思い出さ

せる機能が役に立ちます。 キーボードの上向き矢印キーを押す度に前回のコマンド、 前々回のコ

マンド · · · とさかのぼって呼び出されるので、 目的のものが出てきたら左右の向きの矢印キーやBackspace キーなどを使って必要なところだけを書き換えます。 書き換えたら Enter キーを押して実行させます。 また、さかのぼり過ぎたら下向き矢印キーで戻ることができます。Windows ではウィンドウ上部の Prev ボタンと Next ボタンにもコマンドを思い出させる機能があります。

3.8 オンラインヘルプ

そのほかの重要な機能としてはオンラインヘルプがあります。オンラインヘルプは help と打て

ば起動して、情報提供の可能な項目のリストが表示されます。 そのリストから項目を選ぶとさら

に詳しい表示に変わります。 UNIX では、オ ンラインヘルプが表示されているとき Return キーを単独で押すとオンライン ヘルプの階層を逆に戻るようになっています。 それで、 Return キーを何度か押せばオンラインヘルプの表 示が終了します。Windows 版では Help メニューからオンラインヘルプを辿ることができます。

オンラインヘルプの中の見たい項目がわかっている場合は、help コマンドにその項目名を指定すれば、すぐに目的の項目が表示されます。たとえば、GNUPLOT に組込まれている関数にどんなものがあるかが知りたければ、次のようにして “functions” という項目に直接行けばよいのです。

gnuplot> help functions

7

Page 8: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

練習問題

指数関数 ex は exp(x) で計算できる。たとえば pr exp(1) と打てば e の値 2.71828...

が得られる。e2+3 は e2 × e3 に等しいが e2 + e3 とは異なることを、GNUPLOT で計算して確かめよ。また、e2×3 は e2 × e3 と異なることを確かめよ。

4 グラフのデモンストレーション

GNUPLOTのグラフ作成機能のデモンストレーションを行うこともできます。Windows 版では File メニューの Demos でファイルを呼び出すダイアログボックスが開くので、 demo フォルダーの中の自動実行スクリプトファイルから選んで OK ボタンを押します。 このフォルダーの中でファイル名の最後が.dem となっ ているものが GNUPLOT で実行可能な自動実行スクリプトファイルです。

UNIX では、デモンストレーション用の自動実行スクリプトファイルが格納されているディレクトリーを調べてそこにあるファイルをまず自分で作ったサブディレクトリーにすべてコピーし

ておくのが良いでしょう。 そのサブディレクトリーに移ってスクリプトファイルの名前を付けて

GNUPLOT を起動します。 ここまでのシェルでのコマンド操作は大体次のようになるでしょう。(この通りやってうまく行くかどうかは状況によります。)

% mkdir gplotdemo

% cp /usr/share/doc/gnuplot-doc/examples/* gplotdemo/

% cd gplotdemo

% gnuplot all.dem

all.dem はすべてのデモンストレーションを順に自動実行するものです。1部だけ見たい場合は

% gnuplot simple.dem

のように各デモンストレーションファイルを実行させると良いでしょう。 端末に

Hit return to continue

と表示されたら、Enterキーを押せば次に進みます。デモンストレーション用のスクリプトファイルはテキストエディタ(たとえばNotepadや emacs)で開いて読むことができます。 ファイルの中身は GNUPLOT に与えるコマンドが順番に並んだものですから、コマンドの使い方の例として読むことができます。 #で始まる行には説明が書いてあります。

5 関数グラフの描きかた

5.1 基本操作

1変数関数のグラフは非常に簡単に描くことができます。y = x2 − 2x のグラフを描いてみま

しょう。後で印刷もします。

gnuplot> plot x**2 - 2*x

8

Page 9: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

と入力するとグラフ用のウィンドウが開き放物線が描かれます (独立変数として x 以外のものを使

いたい場合は plot と dummy に関するヘルプを見てください)。 この放物線が x = 0 と x = 2 でx 軸と交わるはずであることは式からわかりますが、今描いたグラフではあまりはっきりとはわかりません。そこで、この 2点のあたりがよくわかるようにグラフを描く範囲を決めます。

gnuplot> set xrange [-1:3]

gnuplot> replot

set コマンドにはいろいろなバリエーションがあり、グラフを描くときのいろいろな条件を設定します。 set xrange は横軸の下限と上限を設定します。replot は最近描いたグラフを描き直すコ

マンドです。図 3はこのようにして描きました。set xrange の括弧の種類と下限値、上限値を区切る記号に注意してください。間違えると、た

とえば

gnuplot> set xrange [-1, 3]

^

’:’ or keyword ’to’ expected

のようにエラーメッセージで間違いのある箇所を指摘してきます。今の場合はコンマのところを :(コロン)か to に直せばよいことがエラーメッセージでわかります。

-1

-0.5

0

0.5

1

1.5

2

2.5

3

3.5

-1 -0.5 0 0.5 1 1.5 2 2.5 3

Dep

ende

nt v

aria

ble

Independent variable

A Parabola

図 3: y = x2 − 2x のグラフ

y の範囲は関数の値の範囲に合わせて自動的に調整されます。しかし、関数の値が部分的に非常

に大きくなるような場合には、自動調整にまかせていては関数の値が小さい部分の変化が見えなくな

ります。たとえば、y = 1/xのような発散する関数でそれが起こります。その場合には set yrange

を使って y の範囲を x の範囲指定と同様にして指定します。たとえば、

gnuplot> set yrange [-3:3]

gnuplot> plot 1/x

yの範囲設定を自動に戻すには、

gnuplot> set autoscale y

とします。現在の設定値を調べるには show というコマンドを、

9

Page 10: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

gnuplot> show xrange

のように使います。 いろいろある設定や変数の値などを全部見るには次のようにします。

gnuplot> show all

ところで、 replot は rep と縮めて入力してもだいじょうぶです。 plot は p だけでも OK です。また、 set xrange は se xr としても Ok です。縮めすぎてどのコマンドかわからなくなるとそのことを教えてくれます。 たとえば se x とやってみてください。

5.2 グラフの仕上げ

次に横軸のラベルと縦軸のラベルと表題を入れます。 後で印刷するときに自分のものであるこ

とがわかるように、表題には自分の名前などを入れておきましょう。

gnuplot> set xlabel "Independent variable"

gnuplot> set ylabel "Dependent variable"

gnuplot> set title "A Parabola (by Imoko Ono, May 607)"

gnuplot> replot

表題などの文字列は "Independent variable" のようにダブルクォートで囲っておく必要があり

ます。Windows では Axes メニューや Chart メニューからもこれらのコマンドを呼び出すことができますが、その場合は文字列をダブルクォートで囲む必要はありません。

次のようにするとグラフの内部まで目盛線が引かれます。

gnuplot> set grid

gnuplot> replot

set grid の反対は unset grid です。

グラフの右上には入力した式が表示されますが、これは Key と呼んでいます。Regend(凡例)のことです。これがいらない場合は

gnuplot> unset key

とやります。 Windows ではこれらは Chart メニューにあります。

練習問題

関数 g(x) = e−x2を定義するため、g(x)=exp(-x**2) とし、plot g(x) でグラフを

描きなさい。2g(x) のグラフを plot 2*g(x) で描きなさい。次に、g(x) − 1、g(2x)、g(x/2)、g(x − 2)、g(x + 10) のグラフがどうなるかを予測し、実際に描いて予測を確かめなさい。

10

Page 11: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

6 グラフの出力

6.1 印刷

では今作ったグラフを印刷しましょう。Windows ではグラフを表示したウィンドウからプリンターに出力する方法が最も簡単です。 このウィンドウの中をマウスの右ボタンでクリックすると

メニューが出ますから、 その中から Print を選んでプリンターの設定などを適当に行えばグラフがプリンターから印刷されて出て来ます。

UNIX では「パイプ」という機能を使って印刷するのが簡単です。それには、GNUPLOT のプロンプトで次のように入力します。

gnuplot> se te po la 22; se ou "|lpr"; rep; se ou; se te x11

ここで、"|lpr"の部分がパイプで、|という記号は縦線です。se ou "|lpr"は set output "|lpr"

の省略形で、GNUPLOT の出力を他のコマンド lpr に送ることを示しています。

lpr コマンド以外の印刷コマンドを使うこともできます。たとえば、gtklp というコマンドが使

えるなら、

gnuplot> se te po la 22; se ou "|gtklp"; rep; se ou; se te x11

とします。gtklp では、ダイアログでプリンターの設定を自由に切り替えて印刷をおこなうことができます。

上のコマンドは5つの別々のコマンドを省略形にして1行にまとめたものです。意味がわかるよ

うに長く書くと次のようになります。

gnuplot> set terminal postscript landscape 22

gnuplot> set output "|lpr"

gnuplot> replot

gnuplot> set output

gnuplot> set term x11

1行目はプリンターの種類と用紙の向きと文字の大きさをセットしています。UNIX ではプリンターに送る印刷データの形式として PostScript 形式が使われますから、その形式でグラフを出力するように指定しています。landscape は地図のように紙を横長に使うことを意味します。 縦長

の場合は portrait です。次の 22 は文字の大きさを 22 ポイントにセットしています (1ポイントは約 0.35 mm)。他にどんな設定ができるかは help postscript と打ってオンラインマニュアル

で調べることができます。2行目は出力先を指定するものです。3行目は replot でグラフを描き

直しています。いつもは画面にグラフが描かれますが、今は set output で出力先を切り替えて

いるので、 lpr コマンドを介してプリンターに出力されます。4行目は、出力先を元に戻して端

末画面にグラフが描かれるようにしています。これは同時にプリンターへのデータの流れの終了を

意味し、プリンターはこの段階で印刷をはじめます。5行目は端末が X 端末であることを思い出させています。これがなければ、次にグラフを描こうとしても PostScript 形式の文字データが表示されてしまうでしょう。

6.2 ファイルへの出力

文書中に挿入するためにグラフをファイルに保存するには、次のように landscape のところを

eps に変え出力先としてファイル名を指定します。Windows でもこの方法が使えます。 eps とい

11

Page 12: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

うのは Encapsulated PostScript のことで、 用紙の中での絵の配置や用紙の大きさの情報を除いて絵だけにしたものです。

gnuplot> se te po eps 22; se ou "parabola.eps"; rep; se ou; se te x11

Windows では、出力先を画面に戻すコマンドが異なり、

gnuplot> se te po eps 22; se ou "parabola.eps"; rep; se ou; se te win

のようにします。

ファイルに保存した後は、いろいろなコマンドでファイルの内容を表示して出来上がりを確認す

ることができます。たとえば、UNIX では端末で

% gv parabola.eps

と打つと表示ができるかもしれません。gv が無い場合は、ggv か evince か display が使えるかもしれません。また、通常は、ファイルを保存したディレクトリーをファイルブラウザ (ファイルマネージャ)で開いて目的のファイルを見つければ、マウス操作で開くことができるようになっているでしょう。

Windows でも、LATEXシステムがインストールされていれば、eps を表示するプログラムが入っているはずです。Adebe Illustrator が入っていれば、それで表示することもできます。

eps ファイルは epsbox か graphics パッケージを使って LATEX文書の中に取り込むことができます。また、ワープロ文書に取り込むことも可能です。しかし、web ページの画像として使うには、eps ではなく、png が適しています。その場合は

gnuplot> se te png giant; se ou "parabola.png"; rep; se ou; se te x11

のようにします。giant は最大の文字サイズを使うよう指定するものです。ワープロでも png を使うことができますが、GNUPLOT から出てくるものはweb ページ指向になっていて画質がよくありません。

6.3 各種出力形式

グラフに後で文字を入れたり線の太さや種類を変えたりするために別のプログラムを使って編

集する場合は、使える編集プログラムに応じて出力形式を選ぶ必要があります。もし、Adobe

Illustrator が使えるなら、eps で出力したものの編集がかなり自由にできます。これは理想的な状況と言えますが、ただ、Adobe Illustrator はひじょうに高価です。ただで使えるものとしては、inkscape というプログラムがあります。Adobe Illustrator にある基本機能の多くは inkscape にもあり、十分強力で実用的です。inkscape で編集する場合は、epsか svg 形式にします。svg なら、次のように出力します。

gnuplot> se te svg size 10000 7500 fsize 200

gnuplot> se ou "parabola.svg"; rep; se ou; se te x11

size 指定はグラフの縦横の分解能で、これが小さいと滑らかなグラフが得られません。fsize 指定は文字サイズです。なお、inkscape は UNIXでもWindowsでも動きます。

GNUPlot で set terminal と打つと、他にどのような出力形式が使えるかを見ることができま

す。tgif 形式は tgif というプログラム、fig 形式は xfig というプログラムで編集ができます。これ

12

Page 13: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

らは UNIX で以前から使われてきた描画プログラムで、LATEXに入れる図の中に数式を入れることができます。ただ、これらのプログラムは特有の操作方法を持っているため、簡単にはマスター

できないかもしれません。

LATEX用の数式入りの図を作る方法として、LATEXの psfrag パッケージは強力な方法です。こ

のパッケージを使うと、Postscript ファイルの中の任意の文字列を任意の TEXコマンドに置き換えることができます。たとえば、TEX原稿の中に、普通の文字列 “EQ1” を数式

∫ x

−∞ N(x′)dx′ に

おきかえる指示を書いておきます。すると、Postscript ファイルには “EQ1” と書くだけでよいのです。たとえば、eps や svg で出したものに Adobe Illustrator や inkscape で数式の代わりの代替文字列を入れて eps 形式で保存します。

GNUPLOTの中で TEX数式を直接書くこともできます。この場合は、set terminalで epslatex

を指定します。epslatex 形式では、図のが入った eps ファイルと TEXコマンドが入った tex ファイルの両方が出力されます。後者のファイルを TEX原稿で読み込んで使うと、図と文字の両方が入るようになっています。

7 いろいろなグラフ

7.1 重ね合わせグラフ

次の関数は振動数 x の入力に対する振動子の応答の強さをあらわすのに使われるもので、ロー

レンツ型関数と呼ぶこともあります。

y =1

(x − 1/x)2 + D2

パラメーター D はエネルギーの散逸の速さをあらわし、D の値が小さいほど振動子は強い共鳴を

起こします。

いくつかの D の値に対する x-y グラフを混ぜて描いてみましょう。 式がちょっと複雑なので、次のようにして2変数の関数 R(x, D) を定義します。

gnuplot> R(x, D)= 1 / ( (x - 1/x)**2 + D**2 )

D = 1 の場合のグラフは、

gnuplot> plot R(x, 1)

で描くことができますが、それに D = 0.5 と D = 2 のグラフも加えてみましょう。ついでに、グラフ全体の表題と、縦横の軸に表示する「ラベル」も入れます。

gnuplot> se title "Response of Linear Oscilator"

gnuplot> set xlabel "normalized frequency"

gnuplot> set ylabel "intensity"

gnuplot> set xrange [0: 4]

gnuplot> set samples 250

gnuplot> set key

gnuplot> plot R(x, 1) title "D=1", R(x, 2) ti "D=2", R(x, 0.5) ti "D=0.5"

13

Page 14: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

0

0.5

1

1.5

2

2.5

3

3.5

4

0 0.5 1 1.5 2 2.5 3 3.5 4

inte

nsity

normalized frequency

Response of Linear Oscilator

D=2D=1

D=0.5

図 4: 振動子の応答

このように、plot コマンドに複数の式を指定するとそれらのグラフが一緒に描かれます。式と式

の間はコンマで区切る必要があります。set samples コマンドは計算する点数を指定するもので

す。何も指定しなければこの値は 100 です。これではグラフの鋭く曲がっている部分が不正確に描かれるのでここでは 250 に増やしています。 set key は凡例を書き込むように指定しています。

凡例に表示する文字列は、plot コマンドの中で title "D=1" のように指定しています。

7.2 対数グラフ

対数目盛のグラフの作り方についても触れておきましょう。先ほど定義した関数のパラメーター

D と変数 x をもっと広範囲に変化させてグラフを描きます。広範囲に変化する量には対数目盛り

が適しています。

gnuplot> set logscale x

gnuplot> set logscale y

gnuplot> set xrange [0.01: 100]

gnuplot> set yrange [0.00005: 200]

gnuplot> set samples 400

gnuplot> plot R(x, 0.1), R(x, 1), R(x, 10)

14

Page 15: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

1e-04

0.001

0.01

0.1

1

10

100

0.01 0.1 1 10 100

inte

nsity

normalized frequency

Response of Linear Oscilator

D=0.1D=1

D=10

図 5: 振動子の応答 (両対数目盛)

set logscale で x 軸と y 軸を対数目盛にし、set xrange で x の範囲を広げました。 対数目

盛りはプラスの範囲しか含むことができませんから、この範囲には 0 が入らないようにしなければなりません。 y の範囲は特に指定しなくても関数の値によって自動的に調整されます。

通常のリニアスケールの目盛に戻すには

gnuplot> unsetset logscale

とやります。 また、目盛りの範囲を自動に戻すには

gnuplot> set autoscale y

などとやります。

7.3 パラメトリック関数のグラフ

パラメトリック関数というのは x も y も何か別の独立変数であらわされるものです。たとえば、

運動物体の位置座標は x も y も時間の関数としてあらわされます。GNUPLOT ではパラメトリック関数の独立変数として t を使います。 たとえば、

x = sin t + t, y = cos t

であらわされる運動の軌跡を表示するには次のようにします。

gnuplot> set parametric

dummy variable is t for curves, u/v for surfaces

gnuplot> set trange [-5:5]

gnuplot> set autoscale

gnuplot> plot sin(t)+t, cos(t)

最初の set parametric は plot 命令の機能をパラメトリックモードに変更します。 通常のモー

ドにもどすコマンドは unset parametricです。plot命令では xと y を tであらわす式をコンマ

で区切って並べます。独立変数 t の範囲を決めるには set trange を使います。 set autoscale

は表示される範囲を自動的に決めるようにします。図のように、2つ以上のグラフを重ねたいときは plot 命令で x, y の式をくりかえして指定します。

15

Page 16: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

-2

0

2

-6 -4 -2 0 2 4 6Y

X

sin(t)+t, cos(t)2*sin(t)+t, 2*cos(t)

図 6: パラメトリックプロット

7.4 極座標表示

Kepler の法則によれば、惑星の軌道の形を極座標であらわすと

r = a(1 + e)/(1 + e cos θ)

となります。 a は近日点距離、 e は軌道の離心率で、 rは惑星の太陽からの距離、 θ は近日点

方向からの偏角です。 この式で e が 0 なら r は一定になります。 つまり e = 0 の軌道は完全な円です。 e が正の値で 1 以下なら r は a 以上 a(1 + e)/(1− e) 以下の範囲を変化し軌道は楕円になりますが、e が 1 に近づくほど軌道は偏平になります。 e が1以上になると無限遠まで飛んで

いくので惑星とは言えなくなりますがそのような軌道も可能です。 e < 1 の場合の軌道の形は双曲線ですが、e = 1 のときは放物線です。双曲線は2つの枝がありますが、惑星は太陽から斥力ではなく引力を受けて運動するので内側に太陽を含むような枝が実際の軌道です。

4

2

0

2

4

4 2 0 2 4

Y

X

e=0e=0.5

e=1e=2

図 7: 惑星の軌道

近日点を固定していろいろな離心率に対応する軌道を描いてみましょう。 まず

gnuplot> Q(x, e) = (1+e)/(1+e*cos(x))

16

Page 17: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

と打って関数 Q(x, e) を定義します。 この関数は近日点距離を単位にして測った太陽からの距離を近日点方向からの角度と離心率であらわすものです。θ のかわりに x を使っています。 このよ

うな極座標表示の式をそのままグラフにするには次のようにします。

gnuplot> unset grid

gnuplot> unset parametric

gnuplot> set polar

gnuplot> set xrange [-3.14: 3.14]

gnuplot> set yrange [-5: 5]

gnuplot> plot Q(x,0) title "e=0", \

> Q(x,0.5) title "e=0.5",\

> Q(x,1) title "e=1", \

> Q(x,2) title "e=2"

set polar が plot コマンドの機能を極座標表示のモードにするコマンドです。前にパラメトリックモードを使っていたなら set noparametric でそれを解除します。 set yrange コマンドは y

軸方向の範囲ではなく中心からの距離を制限します。 今扱ってる軌道のいくつかは無限に遠くま

で伸びているので、グラフに収める範囲を制限しなければなりません。 plot コマンドでは離心率

の異なる4つの軌道をプロットしています。 title キーワードと文字列を使って、凡例の文字列

を指定しています。 全部を1行に入れることもできますが、見にくいので数行に分けて打ち込ん

でいます。 このように行末にバックスラッシュを付けると現在の行を次の行に継続することがで

きます。 (日本語 Windows ではバックスラッシュは円マーク Y= になります。) > は継続行の始め

に表示されるプロンプトですからこれは入力しません。

8 2変数関数

8.1 メッシュによる3次元グラフ

3次元のグラフを綺麗に作るにはいろいろなテクニックが必要になります。 ここでは2変数の

実数値関数のグラフの作り方をざっと見ておくことにしましょう。2変数 x と y のガウス型関数

G(x, y) = e−x2e−y2

= exp(− (x2 + y2)

)のグラフは吊鐘型で、吊鐘の中心は原点 x = 0, y = 0 にあり、x 方向と y 方向の幅は共に1程度です。中心をずらしたり幅を変えることは簡単です。たとえば、G((x − 1)/2, y) は x 方向に 1 だけずれ、x 方向の幅は 2 倍 になります。グラフは次のようにして描くことができます。

gnuplot> g(x,y) = exp(-x**2 - y**2)

gnuplot> set xrange [-10:10]

gnuplot> set yrange [-10:10]

gnuplot> set zrange [0:1.1]

gnuplot> splot g(x/5,y/5)

グラフのメッシュの数を増やして縦横ともに 40 本にするには、

gnuplot> set isosamples 40,40 ; replot

17

Page 18: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

とします。 この値が大きすぎると計算がなかなか終らなくなるので注意してください。 メッシュ

のすきまを不透明にして内側が見えないようにするには

gnuplot> set hidden ; replot

とやります。

g(x-5,y+3,4,4) + g(x+5,y+3,4,4) + 0.6*g(x,y-3,2,2)

-10-5

05

-10

-5

0

5

100

0.5

1

図 8: 2変数関数のプロット

では、 上記の関数を使って3つのコブを並べてみましょう。

gnuplot> h(x,y,w) = g(x/w, y/w)

gnuplot> splot h(x-5,y+3,4) + h(x+5,y+3,4) + 0.6*h(x,y-3,2)

短く書けるよう、関数 h(x,y,w) を新たに定義して使いました。3番目の項でできるコブは背が

0.6 倍で低いので他のコブに隠れて一部しか見えていませんね。 見る角度を変えるには、

gnuplot> set view 45,30

gnuplot> replot

のようにします。 始めのパラメーターが x 軸の回りの回転角度で2番目のパラメーターが z 軸の回りの回転角です。 単位は度です。 これらの値をゼロにすると z 軸方向から垂直に見下ろす視点になります。 これらの値を少しずつ変えて効果を観察すればよくわかるでしょう。

8.2 カラーマップ

表面に色を塗って関数値の変化を表現するには、次のようにします。

gnuplot> set hidden

gnuplot> set pm3d at s

gnuplot> replot

set pm3d at s を set pm3d at bs や set pm3d at b に変えると、色を塗る場所が変わります。

set pm3d at b にした場合は、unset surface も同時に指定するとよいでしょう。

18

Page 19: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

h(x-5,y+3,4) + h(x+5,y+3,4) + 0.6*h(x,y-3,2)

-10

-5

0

5

10 -10-5

0 5

10

0

0.2

0.4

0.6

0.8

1

図 9: カラープロット

8.3 等高線

地図のように関数値を等高線であらわすグラフを作ることもできます。set contour と打つと

等高線モードになり、 splot で描く3次元グラフの中の x-y 平面に等高線が描かれます。曲面がじゃまなら set nosurface で消します。さらに視点を真上に持って来ると見慣れた普通の等高線

図になります。 これらの操作をまとめると次のようになります。

gnuplot> set contour

gnuplot> unset surface

gnuplot> set view 0,0

gnuplot> splot h(x-5,y+3,4) + h(x+5,y+3,4) + 0.6*h(x,y-3,2)

もっと精密な図を得るには、計算する点の数を増やす必要があります。さらに B-Spline という方法で曲線を滑らかにするように指定すると効果があります。また等高線の本数を調節することもで

きます。 これらの操作は次のようにします。

gnuplot> set isosamples 100,100

gnuplot> set samples 100,100

gnuplot> set cntrparam bspline

gnuplot> set cntrparam levels 20

gnuplot> replot

19

Page 20: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1

-10 -5 0 5 10-10

-5

0

5

10

図 10: 2変数関数の等高線プロット

9 数値データの処理

GNUPLOT は式だけではなく数値で与えられたデータをグラフにし、簡単なデータ処理をおこなうこともできます。これについて簡単に述べます。

変化する2つの量の間になんらかの関係がある場合、これらを同時に多数回測定してグラフにす

ると量の間の関係が浮かび上がります。GNUPLOT でグラフ化するには、測定データをたとえば次のように並べてテキストファイルに入れておきます。

0 6.8

3 7.8

6 6.0

7 5.1

10 0.4

8 4.2

9 2.0

4 7.3

5 6.8

2 7.7

1 7.5

このように、第一の量の値およびそれと同時に測定した第2の量の値を1行中に並べます。これを

カレントディレクトリーの data1 というファイルに保存したということにしましょう (データを打ち込むには mule のようなテキストエディターを使う)。すると、GNUPLOT で次のようにしてこれをグラフにすることができます。

20

Page 21: GNUPLOT による関数グラフの作り方 › ~tanigawa › materials › appguide › gplot...GNUPLOT による関数グラフの作り方 2008 年3 月15 日 概要 UNIX 版とMicrosoft-Windows

gnuplot> plot "data1"

関数のグラフと一緒に描かせるには、次のようにファイル名と式とをコンマで区切って並べます。

gnuplot> plot 8 - 0.1*x**2, "data1"

この場合、グラフの横方向の範囲はデータの範囲で決まります。

式をデータに適合させる機能もあります。それにはまず、次のようにパラメーター付きの式を定

義し、パラメーターに大雑把な予測値を入れておきます。

gnuplot> f(x) = a*x**2 + b*x + c

gnuplot> a = -0.1

gnuplot> b = 0

gnuplot> c = 8

gnuplot> plot f(x), "data1"

予測値が当たらずとも遠からずであることをグラフで確かめています。次に fit というコマンドを使えばパラメーターの値を自動的に調節してくれます。

gnuplot> fit f(x) "data1" via a,b,c

これでパラメーター a, b, c の最適値が表示され、それらの変数の値も最適値に変更されます。もう一度グラフを描くと、データに適合した式のグラフが得られます。後からパラメーターの値を見

るには、

gnuplot> print a,b,c

のようにやります。

0

1

2

3

4

5

6

7

8

0 2 4 6 8 10

f(x)"data1"

図 11: 関数のデータへの適合

パラメーターに対して一次の式の場合は上のように簡単に適合させることができます。しかし、

パラメーターに対して非線形の式だとうまくいかない場合があります。そういう場合はまず、パラ

メーターの初期値として最適値になるべく近い値を選ぶことが重要です。また、一度に1つのパラ

メーターしか動かさないようにし、何度も適合を繰り返しながら各パラメーターを絞り込んで行く

ようにします。また、1つのパラメーターがゼロに近い場合に適合に失敗することがあります。こ

の場合には、式を変形するなりして、異なるパラメーターの値のオーダー (桁)があまり違わないようにすれば解決します。

21