gnuplotによるグラフの作成

in [TeXの部屋]

gnuplotを利用したグラフの作成手順を取りまとめました。

gnuplotを利用してグラフの作成ロードを駆け抜けよう!

  • MathJaxを使用しているので、 スマホでは表示に時間がかかることがあります。
  • モバイル利用(Android)でのメニュー選択は、 SiteMapを利用するか、 または「長押し」から「新しいタブを開く」を選択してください。
■ 「gnuplot」によるグラフの作成


[御案内] TeXを利用した数学プリントの作成では, 関数のグラフをどのように作成するかは大きな問題です. 簡単な関数であれば「emath」で作成できますが, 関数の式が複雑になってくるとemathで定義するのはちょっと面倒です. また,emathは2変数関数のグラフには対応していません.
 そのようなときは,関数のグラフ描画ソフトを利用するとよいでしょう. 下記に,フリーで入手できる主なソフトを列記します.
WinTpicgnuplot Ngraph GRAPES FunctionView GeoGebra Cinderella
 この中から, ここではgnuplotを用いた関数グラフの描画方法とTeXへの取り入れ方に ついて解説します.gnuplotは, 数式処理ソフトMaximaにも組み込まれているソフトです. 離散的な実験データのグラフ化や2変数関数のグラフも描画することができ, 理工系の研究論文の図の作成にも利用されていますが, ここでは数学の授業のプリント作成で必要と思われる部分について解説します.

★このページには数学絡みで訪れる方が多いと思われます。 最近、世の中は「ベキ分布」に支配されていることに気づき 「ベキ分布:リンク集」を作成しました。 こちらも是非参照してください。


[お知らせ] 下記を出版しました。 PCやスマホで使える数式処理ソフト Maximaの解説書です。 計算問題やグラフ問題の解答を作るときに非常に重宝します。 フリーソフトなので一度試してみてください。
 なお、Maximaでのグラフ描画ではgnuplotが利用されています。 PC版Maximaでグラフを描いてeps保存すれば、 数学のプリント作成の際にも利用することができます。
いつでも・どこでも・スマホで数学!
試し読み 森北出版 amazon 楽天 honto 7net 紀伊國屋電子版

■「gnuplot」とは?

「gnuplot」とは?
 gnuplotは 1変数や2変数の関数のグラフを描画するフリーのアプリケーションで, Unix, Windows, MacOS, Androidなど多数のOS上で動作します. 「グニュープロット」と呼ばれることもありますが, 本来は「ニュープロット」と呼ぶようです. 「gnu」がついていますが, 「GNUプロジェクト」とは関係しないフリーソフトです. 描画されたグラフをepsファイルとして保存すると, TeXのファイルとして取り入れることができます.
 このページでは,gnuplotによる基本的なグラフの描画方法と, TeXのファイルとしての取り入れ方について解説します. 細かい使い方は,他の解説サイトを参照してください.
 とりあえず,どのようなグラフが表示できるかは下記のサイトを参照してください. gnuplotによる多数の出力例が紹介されています.
  • Wikimedia-gnuplot diagrams: 主に平面グラフについて,多数の出力例があります. 画像をクリックして右下に表示される「More details」をクリックすると, スクリプトが表示されます.
  • Demo Scripts for gnuplot version 5: 多数のグラフとスクリプトが登録されています.
  • gnuplot pm3d: いろいろな曲面の出力例があり 画像をクリックするとスクリプトが表示されます.
  • gnuplotギャラリー: 物理学関連の画像とスクリプトが公開されます.
  • 下図は,偏微分や重積分の授業で参考図として作成したものです.

ダウンロード
 最初に,次の手順でgnuplotの最新版をダウンロードします. 以下は,ダウンロードの主な画面を示したものです. Android版は「Google Play」で検索してください.
  1. 本家サイト「gnuplot homepage」にアクセスする.[ URL]
  2. トップ画面の上部に表示されるメニューから 「Download」の箇所をクリックする.

  3. 「gnuplot download」のページに飛ぶと, タイトルの下に「Current gnuplot major version is *.*」 (2019.02.10時点では,5.2)という行がある. Windows版をダウンロードするには,その行の下部にある 「Primary download site on SourceForge」をクリックする.
     Linux版やMac版をダウンロードするには, 下方の「Downloads offerd by others」の箇所にある 「Various Sources and binaries」を参照する.

  4. 「Primary download site」をクリックすると 「SourceFoge」の「gnuplot」のページに飛び, 上部に緑色の「Download Latest Version」のアイコンがある. それをクリックすると, Windowsの最新の自動解凍ファイル(.exe)がダウンロードされる.
     画面の右下に表示される「Sign Up」を クリックしてメールアドレスを登録すると, バージョンアップしたときには最新情報が送られてくる. 連絡不要のときは「No, Thank you」を選択する. いずれにも返答しないで無視してもかまわない.

  5. 以上の操作で,gnuplotのWindows版の最新版が, [Downloads]フォルダーに保存される.2019.02.10時点でのファイル名は 「gp526-win64-mingw_2.exe」(27MB)である.
▲戻る(トップメニュー)

インストール
ダウンロードしたEXEファイルをダブルクリックすると, ファイルは自動解凍されます. 解凍途中では,以下の事について確認が求められます. 特にこだわりが無ければ,「Ok」や「次に」を押し続けていればよいでしょう.
 途中で確認を求められる主な事項は,下記の通りです.
  1. 使用言語が「日本語」でよいかの確認が求められる.
  2. 「使用許諾契約書の同意」が求められる.
  3. 重要な情報を読むことが求められる.
  4. インストールするフォルダーを指定する. デフォルトでは,「c:\Program Files\gnuplot」にインストールされる.
  5. インストールするコンポーネントを選択する. 「日本語対応」のチェックが外れているので,チェックを入れる.
  6. プログラムアイコンを作成する場所を指定する.
  7. 追加タスクを指定する.
  8. インストールしてよいかどうかの確認が求められる.
  9. インストールが終了すると,その旨のメッセージが表示される.

 以上の個々の画面を表示しながら ダウンロード・インストール手順を説明している サイトもあります.ただし, 古いバージョンで説明されているので, このページでの説明と若干違う部分もあるので注意してください.


gnuplotの起動
インストール後にスタートボタンを押すと, 「最近追加されたもの」として, 上部に「gnuplot」の名称のついた2種類のアイコンが表示されます. 「console-version」ではない方のアイコン, つまり一番上に表示されるアイコンをクリックします.

クリックすると下図のようなトップ画面が現れるので, メニューが日本語表示になっていることを確認してください. 「ヘルプ」から「目次」を選択して個々の項目をクリックすると, 日本語の解説が表示されます.


誤って「console-version」を選択すると, 下図のようなDOSモードのgnuplotが立ち上がります.


この画面でもgnuplotの全機能を利用することはできますが, いちいちコマンドを打ち込む必要があり, メニュー形式でのコマンド選択はできません. gnuplotを終了するには, いずれの場合も「quit」か「exit」を打ち込むか, または右上の「×」ボタンをクリックします.
▲戻る(トップメニュー)

■グラフ画面の諸設定

画面のフォント調整
gnuplotの初期画面では, 画面に表示されるフォントが小さすぎると感じるかもしれません. そのフォントの大きさは自由に変更することができます. カーソルを画面上において右クリックすると表示されるメニューから, 「Choose Font...」を選択します. フォントの選択画面が表示されるので, 希望するフォントとサイズを指定します. 最新版をダウンロードするとデフォルトで日本語が使用可能になっているので, サイズの箇所だけ指定すればよいでしょう.



▲戻る(トップメニュー)

平面グラフの描画
gnuplotを利用すると,どのようなグラフが描画されるのかを さっそく試してみましょう. 平面グラフの描画コマンドは「plot」です. 簡単な2次関数 \(\small y=x^2-2x\) のグラフ描画は, 次のように打ち込みます.
  • plot x\(**\)2\(-\)2\(*\)x
関数の入力で「\(\small y=\)」を打ち込む必要はありません. また,gnuplotの数式入力では「べき乗」の記号\(^\)は利用できません. \(x^n\) は,「x\(**\)n」と入力することに気をつけてください. 「数と文字」や「文字と文字」の積は, 積の記号「\(*\)」を間に挟む必要があります. コマンドを直接打ち込まないで, メニューの「プロット(P)」の箇所を利用することもできますが, 単に「plot 」が書き込まれるだけで,関数の式は自分で入力するしかありません. 直接打ち込む方が簡単だと思います. 関数の式を入力して「enter」を押すと,次のようなグラフが表示されます.

このグラフは, おそらくは多くの方がイメージしているグラフではないと思われます. いろいろと気になる点があります.
  1. 座標軸が描画されていない.
  2. 軸の名前(ラベル)が表示されていない.
  3. 縦軸や横軸のスケールが大きすぎる.
縦と横の目盛りはありますが,座標軸が描画されていません. gnuplotのデフォルトでは, 定義域を \(\small -10\le x\le 10\) とした場合のグラフが描画されます. \(\small y\) 軸の範囲は,この定義域内の グラフがすべて表示できるように自動設定されます. 定義されていない点を含むときの \(\small y\) の範囲は,関数により異なります. また,グラフを描画する枠は,デフォルトでは横長に設定されています.

▲戻る(トップメニュー)

座標軸の設定
gnuplot に対するいろいろな設定は「set」コマンドを利用します. たとえば,座標軸を描画して,軸の名前(ラベル)を表示し, 軸の範囲を \(\small -2\le x\le 4, -2\le y\le 6\) に指定するには次のようにします.
  • set zeroaxis
  • set xlabel "x"
  • set ylabel "y"
  • set xrange [-2:4]
  • set yrange [-2:6]
  • replot

両座標軸は「zeroaxis」を指定すると表示されます. どちらか一方でよいとき, \(\small x\) 軸は「xzeroaxis」, \(\small y\) 軸は「yzeroaxis」により表示されます. 数学の教科書などでは, 原点で直交する2本の数直線は正の方向が矢印で示されますが, gnuplotでは単なる点線で表示されます. 始点と終点を指定して矢印を書き入れることはできますが, その方法については後述します.

軸のラベルは,それぞれ「xlabel」「ylabel」で指定して 「”」か「'」で囲います. 簡略化して「xl」「yl」でもかまいません. 座標軸の先端ではなく, グラフを描画する枠の外側に表示され, 縦軸のラベルは90度回転して表示されます. 「set」で指定した内容を削除するには「unset」を用います. たとえば,\(\small x\) 軸のラベルを削除するには「unset xlabel」などとします.

軸に日本語を含めて入力しようとすると, 入力中の日本語がきちんと表示されないかもしれません. 入力が正しくできていればエラー表示はでません. 「replot」すれば,グラフ画面に日本語が表示されているはずです. 例えば,次のように入力してみます.

  • set xlabel '横軸'
  • set ylabel '縦軸'
画面では「軸」の右半分が消えて表示されますが, 「replot」すると日本語で表示されています.

日本語を利用する場合は, その内容を書き込んだテキストファイルをあらかじめ作成しておいて, それを読み込むようにするとよいようです. たとえば,上記の2行を書き込んだファイルを「test.plt」として保存しておいて, そのファイルをgnuplotの画面にドロップするとよいでしょう. ドロップすると,下記のように書き込まれます.
  • load 'C:\Users\・・・\test.plt'
そのファイルの置かれたフォルダーが表示されて, ファイルの読み込み(ロード)が行われたことを示しています. その後で「replot」すると日本語が書き込まれたグラフが表示されます.

gnuplotが入力や出力で利用するフォルダーは, デフォルトでは「My Documents」です. そのフォルダーにファイルを置いているときは, 「load 'test.plt'」だけでかまいません. そのフォルダーを変更する方法は, 「履歴とグラフのファイル保存」の箇所を参照してください.

★なお,グラフ画面を消去するコマンドは「clear」, 入力した各種の指定をすべて初期化するコマンドは「reset」です.


▲戻る(トップメニュー)

座標軸の範囲と目盛り
軸の範囲は「xrange」「yrange」で指定します. 簡略化して,それぞれ「xr」「yr」だけでもかまいません. \(x\) 座標と \(y\) 座標はコロン(:)で区切ることに注意してください. 範囲指定を自動設定に戻すには「set autoscale」とします.

「replot」は,定義済みの関数のグラフを「再描画」させるコマンドです. 改めて関数の式を入力する必要はありません. 関数を描画後に範囲を指定するのではなく, 最初から範囲を与えて描画することもできます. その場合は,下記のように,関数の前で \(\small x\) 軸の範囲と \(\small y\) 軸の範囲を指定します.

  • plot [-2:4] [-2:6] x\(**\)2\(-\)2\(*\)x

座標軸の目盛りは自動的に付されますが, その間隔を自分で指定することもできます. たとえば,\(\small y\) 軸の目盛りを2刻みにするには 「set ytics 2」とします(図は省略). \(x\) 軸は「xtics」を利用します. 目盛りの指定を削除するには「unset」を利用します. たとえば,\(\small y\) 軸の目盛りを削除するには「unset ytics」とします. \(y\) 軸の目盛りを削除して「replot」すると, 縦軸の目盛りが消えて単なる縦線になります(図は略). 「unset yrange」として「replot」すると, \(\small x\) 軸に指定した範囲のグラフが表示されるように \(\small y\) 軸の範囲が自動設定されます(図は略).

なお,座標軸の範囲や目盛りの調整を試してみた場合は, この後の説明の都合上,下記の設定にしておいてください.

  • set xrange [-2:4]
  • set yrange [-2:6]
  • set xtics 1
  • set ytics 1
  • replot


▲戻る(トップメニュー)

色と線種の指定
グラフの色は関数が変わるごとに変わり, 8種類の色が順繰りに変化していきます. どのような色が登録されているかは,「show linetype」により表示されます(図は略). 色に名前がついていないものはrgbコードで表示されます. ただし,コードだけでは色のイメージが沸かないので, 私の感覚(イメージ)で名前をつけました.右列のイメージの箇所は, 一部を除いて正式な色の名前ではありません.

linetype色(rgb) イメージ
1 dark-violet
2 "#009e73" 青緑
3 "#56b4e9" 水色
4 "#e69f00" 橙色
5 "#f0e442" 薄黄
6 "#0072b2" 薄青
7 "#e51e10"
8 black

上記の色が循環していきますが, この中の特定の色で描画させることもできます. たとえば,関数f(x)のグラフを「黒色(black)」で描画させるには, 「plot f(x) linetype 8」または「replot f(x) linetype 8」とします. 再描画の場合,関数部分は必須です. 事前にグラフが描画済みとしても,「replot linetype 8」ではエラーとなります. この8色以外の色で描画するには, 「plot f(x) linetype rgb "gold"」または 「plot f(x) linetype rgb "#ffd700"」などとして, カラーの名称かカラーコードを直接指定します. 「linetype」は「lt」と簡略指定することができます.

グラフの線種はデフォルトでは実線になりますが, 点線や破線で描画させることもできます. その指定は「plot f(x) dashtype N」として,Nの番号で指定します. Nの値により,次のような線種を指定することができます. 「dashtype」は「dt」と簡略指定することができます.

dashtype 線種 
1実線
2破線
3点線
41点鎖線
52点鎖線

以下では,\(\small f(x)=x^2-2x\) として, 線種を変えながら\(\small y\) 軸方向に平行移動しています. 色はgnuplotが自動的に変えています. 指定には簡略化した記法を使っています.

  • f(x)=x\(**\)2\(-\)2\(*\)x
  • plot f(x)\(-\)1
  • replot f(x) dt 2
  • replot f(x)\(+\)1 dt 3
  • replot f(x)\(+\)2 dt 4

曲線の太さを変えるには, 「plot f(x) linewidth N」として, Nには具体的な整数を入れます.デフォルトのNの値は1です. このコマンドは,「plot f(x) lw N」と略記することもできます. また,曲線の色,線種,太さを続けて指定することもできます. 下記では,定義済みの関数 \(f(x)\) に対して, 赤色の点線で太さを5倍にしたものです. コマンドは略記しています.

  • plot f(x) lt 7 dt 3 lw 5


▲戻る(トップメニュー)

格子線(グリッド)の表示
グラフが分かりやすいように,格子線(グリッド)を表示させることもできます. 「set grid」により,グリッドが表示されます. グリッドを非表示にするには,「unset grid」とします.
  • set grid
  • plot x\(**\)2\(-\)2\(*\)x

グリッドは,軸に目盛りがあるときに目盛りの箇所での格子線が引かれます. したがって,目盛りの指定がされていないときに「set grid」を実行しても 格子線は引かれません. たとえば,格子線が引かれている状態で 「unset ytics」として \(y\) 軸の目盛り消去して「replot」すると, 下図のように \(\small y\) 軸を通る格子線は引かれません. なお,そのことを確認後は, 目盛りは「set ytics 1」として元に戻しておきます.

▲戻る(トップメニュー)

グラフ画面のサイズ
gnuplotのグラフ画面は,\(\small x\) 軸や \(\small y\) 軸の範囲を同じにした場合でも 横長の画面に表示されます. 外枠の縦横の長さを同じにするには「set size square」とします. これによりグラフを描画する画面が正方形になりますが, それぞれの範囲指定の仕方により目盛りの幅は異なります. 「set size ratio a」として, \(\small a\) には縦\(\small /\)横の値を入れることでも画面枠のサイズを 調整することができます. 「set size x, y」とすると \(\small 横:縦=x:y \) になります. 下図は,
  • set size square
  • replot
によるグラフです. 「set size ratio 1」としても同じサイズになります.

ただし,この状態でグラフ画面を保存すると, グラフ部分だけではなく外枠の空白部分も一緒に保存されてしまいます. グラフ画面はデフォルトの画面幅のままで利用するのがよいと思います. 軸の目盛りの間隔が同じになるように設定するには, \(\small y\) 軸の範囲は \(\small x\) 軸の範囲の60〜70%程度にするのがよいようです. 具体的な範囲に応じて,目盛りの区切りが良くなるように決めるとよいでしょう.

なお,正方形状にした画面を元に戻すには, 「set size nosquare」または「set size noratio」とします. 以後の説明は,デフォルトの画面幅で行います.


▲戻る(トップメニュー)

凡例の調整
グラフを描画すると,画面の右上に関数の式とグラフの色が表示されます. その部分を「凡例」といいます. この凡例の表示方法は,下記のように変更することができます.
  1. 凡例を表示しないようにするには,
    • 「set key off」を実行する.これにより, それ以降にplotやreplotしたグラフの凡例は表示されない. 表示させるには「set key on」とする.
    • プロットする関数の後に,たとえば「plot f(x) notitle」とする. 「notitle」をつけると, 関数f(x)のグラフだけ凡例が表示されない.
    • 「replot f(x) notitle」とすると, f(x)のグラフだけが直前の画面に上書きされ凡例は表示されない.
  2. 凡例の内容を指定するには,
    • 「plot f(x) title '変更内容'」とする. 関数の式が「変更内容」に置きかえられる. 日本語を入力すると入力画面に表示されない場合があるが, ENTERを押してグラフ画面に表示されれば問題はない.
    • 「replot f(x) title '変更内容'」とすると,直前の画面に上書きされる.
  3. 凡例の位置を変更するには,
    • 「set key bottom」とすると,凡例が下部に表示される. 「left」は左側,「right」は右側,「top」は上部である. 「outside」を指定すると外枠の外側に表示され, 「inside」を指定すると内側に表示される.
    • 以上の指定は複数指定することができる. たとえば,「set key outside top left」として「replot」とすると, グラフ外枠の外側左上の箇所に凡例が表示される.
  4. グラフ画面にタイトルをつけるには,
    • 画面全体にタイトルをつけるには「set title 'Title of Graph'」 のようにする.グラフ画面の外枠の上部中央に「Title of Graph」が 表示される.
    • タイトルの位置は,「set title offset m,n」の書式で変更することができる. たとえば,「set title offset 0,-1」とすると, タイトルの文字が1文字分下がる.
    • タイトルを消去するには「unset title」とする.
    • タイトルに日本語を使用するには,「set title '日本語のタイトル'」 だけを書き込んだファイルを用意して, そのファイルをgnuplotの画面にドロップするか, または「load」で読み込ませるとよい. 「座標軸の設定」の箇所を参照のこと.

下図は,凡例に関して次の指定をしたものです. タイトル部分ではべき乗記号が使用できるようです.

  • set title 'Graph of f(x)=x^2-2x'
  • set key outside
  • replot

▲戻る(トップメニュー)

メニューの利用
以上の設定は,メニューから行うこともできます. 軸に関する諸設定は「軸(A)」の箇所に, 再描画は「プロット(P)」の箇所に登録されています. 下図は「軸(A)」のメニューです.メニューを利用して指定しても, gnuplotの画面には自分で入力したものと同じ内容が書き込まれます. 自己入力とメニュー利用のいずれが簡単かの判断は, それぞれのPCの利用スタイルによると思うので一概には言えません. メニュー利用の場合は,個々のコマンドを覚える必要はありません. コマンドを忘れたときはメニューを利用するとよいでしょう.


コメントの挿入
個々のコマンドの概要を把握できるように,コメントをつけることもできます. 「#」をつけると,それ以降の部分はコメント文として扱われます. 行頭につけると,その行全体がコメント行になります. 下記では行頭につけています. コマンドの履歴を保存して後で再利用したいときは, コメントをつけて保存しておくとよいでしょう. ただし,コメント部分に日本語を入力することはできません. 履歴の保存方法は後述します.

  • # zahyoujiku
  • set zeroaxis
  • # jiku label
  • set xlabel "x"
  • set ylabel "y"
  • # jiku hanni
  • set xrange [-2:4]
  • set yrange [-2:6]
  • # saibyouga
  • replot


▲戻る(トップメニュー)

■2次元グラフの描画

関数の入力と定義
gnuplotでは,いろいろな関数を扱うことができます. 円周率 \(\small \pi\) は,「pi」により参照することができます. 入力するときの書式は,下記の通りです.

関数書式
絶対値関数 abs(x)
平方根関数 sqrt(x)
べき乗関数 x\(**\)n
指数関数 exp(x)
対数関数 log(x), log10(x)
三角関数 sin(x), cos(x), tan(x)
逆三角関数 asin(x), acos(x), atan(x)
双曲線関数 sinh(x), cosh(x), tanh(x)
逆双曲線関数 asinh(x), acosh(x), atanh(x)
階段関数 sign(x), ceil(x), floor(x)

自分で関数を定義するときは, 「f(x)=・・・」の形で定義します. そのグラフは「plot f(x)」により描画されます. 下記では,\(\small f(x)=x^2-\pi x\) を定義してグラフを表示させています. 「plot」の後ろで \(\small x\)と\(\small y\) の範囲を最初に指定しています. 前の設定で座標軸の描画とグリッドの指定をしていれば, その指定を引き継いでグラフが描画されます.

  • f(x)=x\(**\)2\(-\)pi\(*\)x
  • plot [-2:4] [-3:6] f(x)


適当な文字定数を使用することもできます. 下記のようにしても上図と同じグラフが描画されます. あるいは,「f(a,x)=x\(**\)2\(-\)a\(*\)x」と定義しておいて, 「plot f(pi,x)」のようにすることもできます.
  • a=pi
  • f(x)=x\(**\)2\(-\)a\(*\)x
  • plot f(x)

「plot f(x), g(x)」などとすると, 複数の関数のグラフを描画することができます. あるいは,「plot f(x)」の後で「replot g(x)」としてもかまいません.


▲戻る(トップメニュー)

媒介変数表示によるグラフ
gnuplotは, \(\small x=f(t),\, y=g(t)\) のように \(\small t\) を媒介変数として 表された関数のグラフも描画することができます. 極座標で \(\small r=f(\theta)\) と表されている場合は, \(\small x=f(t)\cos{t}, y=f(t)\sin{t}\) により\(t\) を媒介変数として表すことができます. 媒介変数を利用できるようにするには,最初に
  • set parametric
を実行します.すると, 「dummy variable is t for curves, u/v for surfaces」と 表示され,曲線の場合の媒介変数は \(\small t\) を, 曲面の場合の媒介変数は \(\small u, v\) を使用するように表示されます. 元の直交座標に戻すには「unset parametric」とします.すると, 「dummy variable is x for curves, x/y for surfaces」と表示されて \(\small x, y\) の使用に戻ります.

xrange, yrange により座標軸の範囲を指定することができますが, 新たに trange により媒介変数の範囲を指定することができます. \(\small x=f(t),\,y=g(t)\) の \(\small a\le t\le b\) の範囲のグラフを描画させるには, 「plot [a:b] f(t), g(t)」とするだけです. 事前に「set trange [a:b]」を実行していれば, 「plot f(t), g(t)」だけでかまいません. デフォルトでは,\(\small -5\le t\le 5\) に設定されています. サイクロイドは,次により描画されます. \(\small t\) の範囲は,trangeを使用しないで関数の組の前で直接指定しています.

  • set zeroaxis
  • set grid
  • set xrange [-2:8]
  • set yrange [-2:4]
  • set xtics 1
  • plot [0:2\(*\)pi] t-sin(t), 1-cos(t)

下図は,三葉線 \(\small r=2\sin3\theta\) のグラフです. 直前のグラフで \(\small t\) の範囲を指定しているので,関数の組を指定するだけです. つまり,「set parametric」の指定のもとに極座標で表されたグラフを描画するには, 媒介変数を利用した式に定義し直す必要があります。 なお,グラフが画面中央に描画されるよう,\(\small x\) 軸の範囲を調整しています.
  • set xrange [-5:5]
  • set yrange [-3:3]
  • f(t)=2\(*\)sin(3\(*\)t)
  • plot f(t)\(*\)cos(t), f(t)\(*\)sin(t)


▲戻る(トップメニュー)

異なる座標系のグラフ
前項でみたように, 「set parametric」として媒介変数を利用すると 極座標で表された関数のグラフも描画することができます. 直交座標で \(\small y=f(x)\) と表された関数も, 媒介変数を利用すると \(\small x=t, y=f(t)\) と表すことができます. つまり,媒介変数のグラフモードにしておくと, 3種類のタイプのグラフを同じ画面に描画することができます.

例えば,単位円,心臓型曲線(カージオイド),そして正弦曲線 を同じ画面に描画するには次のようにします. 画面設定は前項のものを引き継ぎ,\(\small x\) 軸の範囲だけ変更します. 「set parametric」はすでに実行済みで, 媒介変数 \(\small t\) の範囲も前項ですでに定義済みです.

  • set xrange [-3:7]
  • plot cos(t), sin(t) # unit circle
  • f(t)=1+cos(t)
  • replot f(t)\(*\)cos(t), f(t)\(*\)sin(t) # cardiod
  • replot t, sin(t) # y=sin(x)

このように,一つの曲線をplotした後は,replotを利用して 次々にグラフを重ねがきすることができます.ただし,replotすべきところで plotを利用すると,前に描いたグラフは消えてしまうので注意してください. その場合は,最初からやり直すしかありません.

▲戻る(トップメニュー)

極座標によるグラフ
極座標で表された関数のグラフは,前項により 媒介変数表示に変換して描画することができますが, 「set polar」によりグラフ画面の座標系自体を極座標に直すこともできます. 元に戻すには「unset polar」とします. さっそく試してみましょう. 前項と同じ三葉線を描画させてみます.
  • set poloar
  • plot sin(3\(*\)t)

前項の画面範囲を引き継いで描画され, 始線には動径 \(r\) の目盛りが表示されます. そこで,画面範囲をデフォルトに戻すために「reset」を実行して 描画してみます.
  • reset
  • set polar
  • plot sin(3\(*\)t)

今度は,縦軸と横軸が動径 \(\small r\) の最大幅に設定されて 横長の画面に表示されます.この幅は,「plot」される \(\small r\) の値に応じて自動設定されます. 極座標系にしても, 画面の横軸と縦軸の範囲はxrange, yrangeにより設定することができます. 縦横の目盛りの間隔が揃うように, たとえば縦軸の範囲が横軸の60%になるように設定します.
  • set xrange [-2:2]
  • set yrange [-1.2:1.2]
  • set grid
  • replot 1

関数の式はすでに入力済みなので,「replot」だけでグラフが再描画されますが, 参考までに「replot 1」により単位円 \(\small r=1\) を重ね描きしています. 横軸と縦軸の目盛りはデフォルトで表示されます. この目盛りに不満があるときは「set xtics」などを利用して変更します. 極座標系で「set grid」というコマンドを実行すると, 目盛りのついた箇所での同心円と極からの半直線が描画されます. \(\small r\) の目盛りは「set rtics」により変更することができます. 「set grid」の指定がなされていると, 目盛りを細かくすると同心円も細かくなります.

なお,xrange, yrange の指定は \(r\) の値よりも優先されることに留意してください. たとえば,上記の状態で「plot 3\(*\)sin(3\(*\)t)」を実行すると, この画面に納まる部分だけが表示され,三葉線の全体像は表示されません(図は略).


▲戻る(トップメニュー)

離散データのグラフ
実験等で得られる離散的な数値データをグラフ化することもできます. 数値データはデフォルトでは空白で区切られますが, 「set datafile separator ","」とすることでコンマ区切りの データも読み込むことができます. その描画手順は下記のサイトを参照してください.

なお,デフォルトでは, データファイルは「My Documents」にあることが想定されています. データファイルを置くフォルダーを変更するには, トップメニューの「ファイル(F)」から 「ディレクトリーの移動」を利用してください.

  • GNUPLOT:折れ線グラフの作成
    折れ線グラフの作成方法について解説されています. 「set terminal x11」が頻出していますが, Windows版を利用している場合, このコマンドは無視してよいと思われます. Windows版の「terminal」は, 起動直後に表示されるように「wxt」に指定されています.
  • gnuplotの使い方
    琉球大学工学部電気電子工学科の学生向けの, gnuplotに関する151ページの解説書です. 「第9章 データファイルのプロット」(p106)を参照してください. 非常に詳細に解説されています.
  • gnuplotを使ったグラフ作成
    実験等で得られる離散データの処理の仕方について詳しく解説されています. 「1. 関数を描画」の冒頭に登録されているサンプルデータ「dummy.dat」を ダウンロードして,書かれているとおりに試してみるとよいでしょう.
▲戻る(トップメニュー)

■3次元グラフの描画

2変数関数のグラフ
2変数関数 \(\small z=f(x,y)\) のグラフを描画するコマンドは「splot」です. 一様双曲面 \(\small z=x^2-y^2\) は次のように表示されます. 目盛りの間隔は自動で設定されています.
  • splot x\(**\)2\(-\)y\(**\)2

このグラフに対して,2次元グラフの場合と同様に様々な設定をすることができます.
  1. 座標軸の範囲・目盛り・ラベル
    座標軸の範囲は xrange, yrange, zrange により, 目盛りは xtics, ytics, ztics により, そして,軸のラベルは xlabel, ylabel, zlabel により設定することができます. それらの指定はその後も引き継がれます. その指定を削除するには,たとえば「unset xtics」などとします. 他も同様です.
    たとえば,\(\small -4\le x\le 4,~ -4\le y\le 4\) とすると, この領域のグラフが表示されるように \(\small z\) 軸の範囲は自動設定されます. 再描画するコマンドは「replot」で,2次元グラフと同一です.

    • set xragne [-4:4]
    • set yrange [-4:4]
    • set xlabel 'x'
    • set ylabel 'y'
    • set zlabel 'z'
    • replot

    範囲の設定は,次のようにグラフ描画の「splot」と一緒に行うこともできます. 以下を試してみるときは,「unset」を用いて, 「set」による指定を初期化してから実行してください.

    splot [-4:4] g(x,y)
      \(\small y, z\) の範囲は自動設定
    splot [-4:4] [-4:4] g(x,y)
      \(\small z\) の範囲は自動設定
    splot [] [-4:4] g(x,y)
      \(\small x, z\) の範囲は自動設定
    splot [] [] [-20:20] g(x,y)
      \(\small x, y\) の範囲は自動設定

    \(\small z\) 軸の下方の空白部分を取ろうとして「set zrange [-20:20]」として 「replot」しても,グラフは変わりません(図は略). この空白部分を取るには次のようにします.

    • set ticslevel 0
    • replot

▲戻る(トップメニュー)

  1. 色・線種・太さ・メッシュの間隔
    2変数関数の普通のグラフは曲面になり, デフォルトでは網目模様(メッシュ)で表示されます. その網目の曲線の色・線種・太さは, 2次元グラフのときと同じ書式で変更することができます. 色は「linetype」,線種は「dashtype」,太さは「linewidth」です. それぞれ,lt, dt, lwで簡略化することができます. 下図は,水色のちょっと太めの点線で描画したものです.

    • f(x,y)=x\(**\)2\(-\)y\(**\)2
    • set zrange [-20:20]
    • splot f(x,y) lt 3 dt 3 lw 3

    メッシュの間隔は「set isosample」により調整することができます. 「set iso」でもかまいません. デフォルトでは「set isosample 10,10」で設定されており, \(\small x\) 軸と \(\small y\) 軸がそれぞれ10本の格子線で区切られています. 同じ本数でよいときは「set isosample 10」とすることもできます. 下図は \(\small x\) 軸を50本,\(\small y\) 軸を30本として,本数を変えた場合です.

    • set isosample 50, 30
    • splot f(x,y)

▲戻る(トップメニュー)

  1. 視点の方向
    描画された曲面は,マウスポインターを当ててグリグリすると 任意の角度に回転させることができます. デフォルトでは,視点は \(\small x\)軸を60度,\(\small z\)軸を30度回転した方向に 取られています. この視点は「set view」により変更することができます. 下図は,\(\small x\)軸を30度,\(\small z\)軸を60度回転した場合の図です. 角度は0〜360度の間で指定します. グリグリ回転したときの視点を知るには「show view」とします. 設定した視点をデフォルトに戻すのは「unset view」です.

    なお,下図の画面は回転できません.gnuplotの画面で回転させてください.

    • set view 30, 60
    • splot f(x,y)

▲戻る(トップメニュー)

  1. 隠線処理
    曲面をいろいろ回転させて見ると分かりますが, このメッシュは素通しになっているので裏側から表側が見えます. このとき,「隠線処理」を行うと, 視点の方向から陰になっている部分は見えないようにすることができます. 隠線処理を行うには「set hidden3d」,または簡略化して「set hid」とします. 表側と裏側が別な色で表示されます.
    下図は,視点とメッシュをデフォルトに戻して描画したものです.

    • unset view
    • unset isosample
    • set hidden3d
    • splot f(x,y)

▲戻る(トップメニュー)

  1. 等高線
    曲面が描画できても,\(\small z\) 軸方向が分かりにくい場合があります. そのようなときは等高線も描画するようにすると高さの感覚を捉えやすくなります. 等高線も描画するようにするコマンドは「set contour」です. 下図は,\(\small g(x,y)=x^2+y^2\) のグラフです.\(\small z\ge 0\) なので, \(\small z\) 軸の範囲を \(\small 0\le z\le 40\) にしています. メッシュの細かさは「isosample 20」としました. \(\small x, y\) の範囲と隠線処理(hidden3d)は前の設定が引き継がれています.

    • g(x,y)=x\(**\)2\(+\)y\(**\)2
    • set isosample 20
    • set contour
    • set zrange [0:40]
    • splot g(x,y)

    等高線が描かれて色のレベルが凡例の箇所に表示されます. 「1.」の箇所で設定した「set ticslevel 0」の指定が 引き継がれているので \(\small xy\) 平面に表示されていますが, この指定がなされていないと底面に描かれます. この同心円を曲面上に描くには「set contour surface」, 底面と曲面の両方に描かれるようにするには「set contour both」とします. 等高線の描画を取り消すには「unset contour」とします. 下図は,両方に描かれるようにしています.

    • set contour both
    • replot

    等高線の間隔は「cntrparam」により制御されています. 本数を増やすには「set cntrparam levels N」とします. \(\small N\) には0〜10の数を入れます. 「set cntrp le N」と略記することもできます. ただし,必ずしも指定した数の等高線になるとは限りません. 下図は,10を指定していますが,表示される等高線の本数は6本です.

    • set cntrparam levels 10
    • replot

▲戻る(トップメニュー)

  1. 曲面の色づけ
    曲面全体を色づけするには「splot f(x) with pm3d」とします. 設定取り消しは「unset pm3d」です. 下図は,等高線の描画をやめて描いた場合です.

    • unset contour
    • splot g(x,y) with pm3d

    この色づけを底面にだけ行うには, 「set pm3d at b」とします.

    • set pm3d at b
    • splot g(x,y)

    底面の色づけ部分だけを取り出すには, 「set pm3d map」とします.

    • set pm3d map
    • splot g(x,y)

    色づけの調整は,ある程度上級レベルである必要があります. 詳細は下記を参照してください.

▲戻る(トップメニュー)

媒介変数表示のグラフ
関数が \(\small z=f(x,y)\) と表示されていると, 一価関数のグラフしか描画することができませんが, 媒介変数表示にすると多彩な曲面を描画することができます. 媒介変数を利用するには「set parametric」とします. 1変数関数の媒介変数は \(\small t\) ですが, 2変数関数では \(\small u, v\) を使用します. \(\small x=f(u,v), y=g(u,v), z=h(u,v)\) の式を定義すると, 「splot [a:b] [c:d] f(u,v), g(u,v), h(u,v)」によりグラフが描画されます. [a:b],[c:d] はそれぞれ \(\small u, v\) の範囲です. その範囲を urange, vrange で設定済みのときは, 単に「splot f(u,v), g(u,v), h(u,v)」だけでかまいません.

以下では,下記の設定がなされているものとします. 「reset」して最初から入力するか,不足分を入力するか等により調整してください.

set xrange [-4:4]
set yrange [-4:4]
set zrange [0:40]
set xtics 1
set ytics 1
set xlabel 'x'
set ylabel 'y'
set zlabel 'z'
set ticslevel 0
set isosample 20
set hidden3d
f(x,y)=x\(**\)2\(+\)y\(**\)2

  1. \(\small z=f(x,y)\) のグラフ
    関数 \(\small z=f(x,y)\) は,\(x=u, y=v, z=f(u,v)\) と考えると, 媒介変数表示となります. 下記は,\(\small f(x,y)=x^2+y^2\) が定義済みとした場合のグラフです. \(\small u, v\) のデフォルトの範囲は,\(\small -5\le u,v\le 5\) ですが, \(\small x,y\) の範囲設定の方が優先されるので, \(\small -4\le x,y\le 4\) の範囲内のグラフが表示されています.

    • splot u, v, f(u,v)

    当然ながら \(\small f(x,y)=x^2+y^2\) のグラフと同一ですが, 凡例には「u, v, f(u,v)」と書かれていて媒介変数のモードで 描画されていることを示しています.

    \(\small z=f(x,y)\) のグラフを媒介変数で描画しておくと, \(\small z=\cdots\) としては表現できないような関数のグラフとの 交線をみることができます.たとえば,\(\small yz\) 平面は \(\small x=0, y=u, z=v\) により表されます.この平面は \(\small z=\cdots\) の式では表せません.この座標平面を重ね描きするには次のようにします. 単に「replot 0,u,v」とすると,\(\small v\) は \(\small -5\le v\le 5\) の部分しか描かれないので,大きめにして \(\small v*10\) としています. このグラフにマウスポインターをあてて, (gnuplotの画面で)回転させてみるとよいでしょう.

    • replot 0, u, v\(*\)10

    このように,媒介変数表示を利用して曲面の交線を見るときは, \(\small u, v\) の範囲を指定するのではなく, 関数の \(u, v\) に関する部分の式を調整して,指定済みの \(\small x, y, z\) の範囲を越えるようにするのがよいようです.

▲戻る(トップメニュー)

  1. 円柱座標による表示
    円柱座標は,平面上の曲線を平面に垂直な方向に平行移動してできる曲面を 表すときによく利用されます. たとえば,\(\small xy\) 平面の半径 \(\small r\) の円上の点は \(\small x=r\cos\theta,~ y=r\sin\theta\) で表されますが, その円を \(\small z\) 軸方向に平行移動してできる円柱は, \( \small x=r\cos\theta,~ y=r\sin\theta,~z=t\) により表されます. gnuplot では, その円柱は \(\small \theta,~t\) をそれぞれ媒介変数 \(\small u, v\) に 置きかえることにより描くことができます. たとえば,半径2の円柱は次により描かれます.

    • set zrange [-4:4]
    • set urange [-pi:pi]
    • set vrange [-4:4]
    • splot 2\(*\)cos(u),
      2\(*\)sin(u), v

    この円柱に,同じ半径を持ち中心軸が \(\small y\)軸の円柱を交差させて みましょう.

    • replot 2\(*\)cos(u), v, 2\(*\)sin(u)

    グラフ画面では縦方向に収縮して表示されるので, 縦方向にちょっと伸ばしてみます. この2つの円柱の共通部分の体積を求める問題は, 重積分の応用の定番問題です.

    • set size 0.7, 1
    • replot

▲戻る(トップメニュー)

  1. 球座標による表示
    球座標は平面の極座標の空間版です. 球座標では,空間内の点Pと原点Oとを結ぶ線分OPを考えて, 線分OPの長さ,線分OPの \(\small x\) 軸からの角度,そして \(\small z\) 軸からの角度により点Pを表します.

    \(\small z\) 軸からの角度の計り方は教科書により異なります. gnuplotの球座標での計り方は こちらを 参照してください. デフォルトでの角度の単位はラジアンです. 度数法に変更するには「set angle degree」とします. ここでは,度数法に変更して,\(\small u, v\) の範囲も 0〜360にしておきます.

    球座標で半径 \(\small a\) の球面は, \(\small r=a\) だけで表されます. これを直交座標に直すと,\(\small u, v\) を媒介変数として \(\small x=a\cos{u}\cos{v}\),\(\small y=a\sin{u}\cos{v}\), \(\small z=a\sin{v}\) により表されるので,たとえば半径2の球面は次により描画されます. 前項で画面サイズを設定しているときは, 「unset size」としてデフォルトに戻しておきます.

    • unset size
    • set angle degree
    • set urange [0:360]
    • set vrange [0:360]
    • splot 2\(*\)cos(u)\(*\)cos(v), 2\(*\)sin(u)\(*\)cos(v),
      2\(*\)sin(v)

    \(\small z\) 軸方向がつぶれて表示されるので, 下記ではグラフ画面の縦方向を伸ばしています.

    • set size 0.7, 1
    • replot

▲戻る(トップメニュー)

  1. いろいろな曲面
    ドーナツ状の曲面はトーラスと呼ばれます. トーラスは,たとえば次のような式で描かれます. 個々の式が長くなるときは,あらかじめ定義しておきます. ここでは,角度は弧度法に戻して,メッシュを細かくしています. また,前項の「set size 0.7, 1」が引き継がれています.

    • unset angle
    • set
      urange [0:2\(*\)pi]
    • set
      vrange [0:2\(*\)pi]
    • set isosample 60
    • x(u,v)=(3+cos(v))\(*\)cos(u)
    • y(u,v)=(3+cos(v))\(*\)sin(u)
    • z(u,v)=sin(v)
    • splot x(u,v),y(u,v),z(u,v)

    このトーラスを縦にするには \(\small y, z\) を交換します. さらに,\(\small x\) 軸方向に平行移動すると 次の図が得られます.

    • set xrange [-4:8]
    • replot x(u,v)+3,z(u,v),y(u,v)

    有名なメビウスの帯を描くこともできます. クラインの壺も試してみるとよいでしょう. 方程式はWeb検索してください.

    • x(u,v)=
      cos(2\(*\)u)\(*\)(v\(*\)cos(u)+2)
    • y(u,v)=
      sin(2\(*\)u)\(*\)(v\(*\)cos(u)+2)
    • z(u,v)=v\(*\)sin(u)
    • set urange [0:pi]
    • set vrange [-1:1]
    • set xrange [-4:4]
    • splot x(u,v),y(u,v),z(u,v)

▲戻る(トップメニュー)

陰関数で表された関数のグラフ
gnuplot には, \(\small f(x,y)=0,~f(x,y,z)=0\) のような陰関数で表された関数のグラフを 描画する機能はありません.ただし, 2次元グラフ \(\small f(x,y)=0\) は 曲面 \(\small z=f(x,y)\) と \(\small xy\) 平面との交線として描くことができ, それは等高線を描画することで実現できます.

たとえば,「8の字」曲線(レムニスケート)は, 極座標では \(\small r^2=2\cos{2\theta}\) と表されます. この曲線は極座標モード(set polar)にするか, または媒介変数(set parametric)を 利用すると描くことができますが, ここでは曲面の等高線として描画してみましょう.

この方程式は \(\small r^4=2r^2(\cos^2\theta-\sin^2\theta)\) であることから, 直交座標では \(\small (x^2+y^2)^2=2(x^2-y^2)\) と表されます. そこで,2変数関数 \(\small f(x,y)=(x^2+y^2)^2-2(x^2-y^2)\) を考えて, そのグラフと \(\small xy\) 平面との交線を考えることにします.

最初に,画面設定を次のようにしておきます. 「reset」して入力し直すか, または基礎設定を保存しておいてロードするとよいでしょう. 保存・ロードのやり方は次の項目を参照してください.

set xrange [-4:4]
set yrange [-4:4]
set zrange [-4:4]
set xtics 1
set ytics 1
set xlabel 'x'
set ylabel 'y'
set zlabel 'z'
set ticslevel 0
set isosample 60
set hidden3d

前述の関数を定義して座標平面との交線をみると,次のようになります. gnuplotの画面でグラフを回転させてみると 「8の字」形の交線を確認することができます. 交線の曲線がはっきり出るようにメッシュを細かくしました.

  • f(x,y)=
    (x\(**\)2+y\(**\)2)\(**\)2
    \(-\)2\(*\)(x\(**\)2\(-\)y\(**\)2)
  • set isosample 100
  • splot u,v,f(u,v)
  • replot u,v,0

次に,等高線が表示されるようにして, 本数を1本だけにして描画します.

  • set contour
  • set cntrparam levels 1
  • splot u,v,f(u,v)

底面に曲線が表示されます.\(\small xy\) 平面上の曲線としてみるには, 「unset surface」として等高線だけが表示されるようにして, さらに「set view 0,0」により視点を真上に設定します.

  • unset surface
  • set view 0,0
  • replot

凡例や \(\small z\) 軸のラベルが気になるときは, それら消去します(参照:凡例).

  • unset zlabel
  • set key off
  • replot

下図は,座標軸やグリッドを書き入れ, 範囲を狭めて縦横の目盛りの間隔が揃うようにしたものです.

  • set zeroaxis
  • set grid
  • set xrange [-3:3]
  • set yrange [-2:2]
  • set size 0.8,1
  • replot

3次元グラフ \(\small f(x,y,z)=0\)を描画する機能は gnuplotにはありません. ただし,関数のグラフ描画にgnuplotが使用されている 「Maxima」を利用すると, \(\small f(x,y,z)=0\) で表された曲面を描画する機能(draw3d)があります. 下図は,Maximaによる \(\small x^2+y^2-z^2=1\) と \(\small x^2+y^2+z^3=1\) のグラフです.

▲戻る(トップメニュー)

■履歴とグラフのファイル保存

履歴ファイルの保存と読み込み
gnuplotでいろいろ試しても, 終了すると履歴は全て消えてしまいます.また, gnuplotを起動するごとに, 座標軸の表示や軸の範囲を設定するのは面倒です. そのようなときは,設定が共通と想定される状況を書き込んでおいて, その状況を保存しておきます. そして,gnuplotを起動するごとに保存した設定を読み込むようにするとよいでしょう.

ここで,共通設定を指定するために,いったんgnuplotを終了します. 「quit」か「exit」を入力するか,または画面の右上の「×」をクリックします. その上で,改めてgnuplotを起動して, たとえば下記を入力します.

  • set zeroaxis
  • set xrange [-5:5]
  • set yrange [-3:4]
  • set xlabel "x"
  • set ylabel "y"
  • set xtics 1
  • set ytics 1
  • set grid

ここでは,座標軸を表示し, 縦軸と横軸の目盛りの間隔が同じように見えるように 縦軸の長さを横軸の長さの70%にしています. 関数を具体的に定義した後は, そのグラフを見ながら範囲を適当に調整するとよいでしょう. この履歴を保存するには,

  • save 'filename.plt'

とします.「filename」の箇所は適当に決めてよいですが, 後で思い出せるような名前にしておいた方がよいでしょう. ファイル名は「'」か「"」で囲います. 単なるテキストファイルとして保存されます. 拡張子は「.plt」とする場合が多いようです. ファイルはMy Documentsに保存されます.

単なるテキストファイルとして保存されますが, 自分で入力した内容ばかりではなく, 起動してからユーザーが利用可能になるまでにgnuplotが内部で行っている, 細々とした諸設定も一緒に書き込まれます. その内容を理解しようとする必要はありませんが, プログラムに堪能な方は, 細々部分でgnuplotがどのようなことを行っているのかを知るために 眺めておくとよいでしょう.

「save」を実行したらgnuplotをいったん終了して, 改めて立ち上げます.そして,保存したファイルを読み込むために 下記を実行します.

  • load 'filename.plt'
読み込んだら下記を実行してください. グラフが画面中央におさまるように,幅を変えずに範囲を調整しています.
  • plot x\(**\)2\(-\)2\(*\)x
  • set xrange [-4:6]
  • set yrange [-2:5]
  • replot

▲戻る(トップメニュー)

グラフ画面の保存 (PDF)
描画されたグラフ画面をファイルに保存するには, どのファイル形式で保存するかを意識する必要があります. png, pdf, svg, emfのいずれかで保存するには, グラフ画面の上部で左から2番目のアイコン「Export plot to file」 をクリックします. 保存先のフォルダー,ファイル名,そしてファイル形式を選択すれば グラフ画面が保存されます. 下記は,ファイル名を「sample」とし, ファイル形式は「pdf」を指定して保存しています.

出力されたファイルは, 「sample.pdf」というファイル名で「My Documents」に保存されます. この保存場所は, gnuplotの「ファイル(F)」のメニューで表示される 「ディレクトリーの移動」箇所を利用すると変更することができます(下図). 作成したファイルを事後に利用するのであれば, 扱いやすいフォルダーに変更しておいた方がよいでしょう.

上記のメニューからフォルダーを指定して「Ok」を押すと, gnuplotの画面には,

  • cd 'C:\Users\・・・'
として,変更したフォルダー名が表示されます. 「cd」は,「Change Directory」ということです. 必要ならば,gnuplotを起動して「load」で読み込むファイルに 同じ内容を書き込んでおくと,以後は指定したフォルダーに画像が保存されます.


▲戻る(トップメニュー)

グラフ画面の保存 (EPS)
gnuplotは,描画されたグラフ画像を上記以外のファイル形式でも 保存することができます.その保存のためには, グラフを描画する出力先を変更する必要があります. デフォルトでのグラフの出力先は「wxt」になっています. どのような出力先があるかは,「set terminal」を実行すると表示されます. 下記は,表示されたファイル形式の最初の部分を示したものです. 非常に多数のファイル形式に対応していることが分かります.

gnuplotの画像を「eps」形式のファイルで保存するには, グラフを表示した後に出力先を「postscript」に指定して次のように入力します. 同様に,「gif」で保存するには「set terminal gif」, 「jpeg」で保存するには「set terminal jpeg」とします.

  • set terminal
    postscript eps
  • set output
    'sample.eps'
  • replot
  • set output
  • set terminal wxt
これのコマンドは,それぞれ次のことを行っています. なお,スペルが長くて面倒な場合は, 「set term post eps」または「se te po eps」と略記することもできます.
  1. 出力形式を「postscript」の「eps」形式で行う.モノクロ保存される.
    カラー保存するには, 「set terminal postscript eps
    enhanced color」とする.
  2. ファイル名を「sample.eps」にする.
  3. グラフを再描画する.ただし,事前にグラフを表示済みとする.
  4. 出力したファイルを閉じる.
  5. 出力先を,標準の「wxt」に戻す.

最後に「set terminal wxt」を実行しないと, 次にグラフを描画したときにグラフが画面に表示されないので注意してください. または,次のようにしてもかまいません.

  • set terminal postscript eps
  • set output 'sample.eps'
  • replot
  • set terminal wxt
  • replot
この場合は,「wxt」に戻ってから「replot」する必要があります. それにより,postscriptでの出力ファイルが閉じられます。 ファイルは,デフォルトでは「My Documents」に保存されます. 前項で保存先のフォルダーを変更していれば, 変更したフォルダーに保存されます. 保存したepsファイルをTeXに取り入れる方法は, 「TeXへの取り込み」を参照してください.

ただし,座標軸やタイトルなどに日本語を使用してeps保存すると, 日本語部分が文字化けします. フォントを指定する必要があるようなのですが, いろいろ試してもうまく表示させることができませんでした. 下記を参照して試してみてください. どうしても日本語を使用したい場合は, 出力したファイルを修正して対応することもできます. 「epslatexによる出力」を参照してください.


▲戻る(トップメニュー)

グラフ画面の保存 (その他)
グラフ画面をgnuplotの機能を利用して保存する方法について説明してきましたが, 画面保存をするには他にもいろいろな方法があります. いずれも,png, jpeg, bmp, gif, tifなどのファイル形式で保存することができます.
  • Windowsの 「 スクリーンショット」の機能を利用する.
    1. 「PrtScreen」のキーを押すと画面全体がクリップボードに保存される.
    2. Windowsアクセサリーにある「ペイント」を起動する.
    3. クリップボードの内容を貼り付ける.
    4. 切り出す部分を選択する.
    5. 選択部分を切り取る.
    6. 切り取った部分をファイル保存する.
  • Windows10に新たに備わった 「Shipping Tool」を利用する.
    このツールは使ったことがないので分かりませんが、 ペイントを利用するよりも簡単な手順で必要部分を切り出すことができるようです.
  • 他の画像ツールを利用する.
    私の場合は,フリーソフトの 「WinShot」 を愛用しています.

▲戻る(トップメニュー)

■TeXへの取り込み

\includegraphicsの利用
保存したepsファイルは,「graphics」パッケージを利用すると TeXに組み入れることができます. 基本的には, 「\includegraphics{sample.eps}」とするだけです. 下記では, 画像部分がはっきり分かるよう\fboxにより外枠をつけています.
\documentclass[a4paper,dvipdfmx]{jsarticle}
\usepackage[dvipdfmx]{graphicx}
% [ ]の部分は個々の使用環境による
\pagestyle{empty}
\begin{document}
\fbox{\includegraphics{sample.eps}}
% 図の部分が分かるように外枠をつけた
\end{document}
PDF変換するときにdvipdfmxを利用する場合は, [dvipdfmx]をオプション指定する必要があります. これをつけなくてもタイプセット自体はできてDVIファイルは表示されますが, PDFに変換すると画像の位置がちょっとずれて変換されます.

また,上記のファイル指定は, EPSファイルがTeXのソースファイルと同じフォルダーにある場合です. たとえば,ソースファイルが置かれているフォルダーの サブフォルダー「sub」に置かれているときは \includegraphics{./sub/sample.eps}とします. 下図は,表示されたDVIから画像部分を切り取ったものです.

▲戻る(トップメニュー)

\includegraphicsのオプション
\includegraphicsには, いろいろなオプション機能があります. 以下は,オプション部分とそれにより表示される画像を示したものです.
  • 拡大・縮小「scale」
    \includegraphics[scale=0.75]{sample.eps}
    この値により,画像の拡大・縮小をすることができる.

  • 横幅と高さ「width」「height」
    これらの値により,横幅や高さを指定することができる.
    \includegraphics[width=50mm]{sample.eps}

    \includegraphics[width=100mm, height=50mm]{sample.eps}
    横長に指定したので,画像は横に伸びて歪むことになる.

    \includegraphics[width=100mm, height=50mm,keepaspectratio]{sample.eps}
    「keepaspectratio」を指定すると,縦・横の長さを指定しても, 元の画像の比率を変えないように拡大・縮小が行われる. 下図の場合は,縦の長さに合わせられている.

  • 回転「angle」
    \includegraphics[scale=0.5, angle=-30]{sample.eps}
    度数法で,画像の回転角を指定することができる.


▲戻る(トップメニュー)

emathの利用
作成した画像を文章混じりのプリントに取り入れるには, 「emath」のmawarikomi環境やedaenumerate環境を利用するとよいでしょう. 具体的な利用の仕方は, 「emathの利用法」のページを見てください. ここでは,利用例のみを示します.
  • 文章の中に図を割り付ける. (出力例)

    \documentclass[a4paper,dvipdfmx]{jsarticle}
    \usepackage[dvipdfmx]{graphicx}
    \usepackage{emathp, emathMw}
    \begin{document}
    \begin{mawarikomi}{0.3\textwidth}
    {\includegraphics[scale=0.5]{sample.eps}}
    右図は,gnuplotで作成したグラフをeps保存して利用しています. 表示される画像のサイズは,scaleの値を変えてタイプセットして, 試行錯誤で決めて下さい.
    \end{mawarikomi}
    \end{document}

    ここでは,右側の図を配置するスペースは\textwidthのサイズの30%で 指定しましたが,例えば「5cm」として具体的な値で指定してもかまいません.

  • 並列問題の中に図を入れる. (出力例)

    \documentclass[a4paper,dvipdfmx]{jsarticle}
    \usepackage[dvipdfmx]{graphicx}
    \usepackage{emathp, emathEy}
    \def\theenumii{\arabic{enumii}}
    \begin{document}
    \begin{enumerate}
    \item 次に示されているグラフは,どのような関数のグラフか. 関数の式を答えよ.
    \begin{edaenumerate}
    \item ~\\[-1.5zh] \includegraphics[scale=0.4]{sample3.eps}
    \item ~\\[-1.5zh] \includegraphics[scale=0.4]{sample3.eps}
    \item ~\\[-1.5zh] \includegraphics[scale=0.4]{sample3.eps}
    \item ~\\[-1.5zh] \includegraphics[scale=0.4]{sample3.eps}
    \end{edaenumerate}
    \end{enumerate}
    \end{document}

    画像の縮尺(scale)は,試行錯誤で決めて下さい. また,「\item」の箇所を上記のようにした理由は, 下記のそれぞれの場合を試してみるとよいでしょう. 「\item」の後には何らかのテキストが必要です. 「チルダ(~)」で空白を空けただけです.「\,」でもかまいません.
    1. 「\item \include・・・」とすると番号が図の左下になる.
    2. 「\item \\ \include・・・」とするとエラーになる.
▲戻る(トップメニュー)

epslatexによる出力
gnuplotの中で日本語を使用できても, それをeps保存すると文字化けしてしまいます. その場合は,「eps」ではなく「epslatex」を指定して出力すると, 出力されたファイルに対して日本語を使用することができます. 前項までに利用してきた放物線 \(y=x^2-2x\) を描画(plot)した上で, 次の指定を行います.
  • set terminal epslatex
  • set output
    'sample_j.eps'
  • replot
  • set output
  • set terminal wxt
これにより,ファイルの出力先(デフォルトでは「My Documents」)には 「sample_j.eps」の他に「sample_j.tex」というファイルも出力されます. 「eps」ファイルの扱い方は既に説明済みです. 拡張子が「tex」の同名ファイルには グラフ画面がTeXのコマンドで書き込まれているので, このファイルを \input することでグラフをTeXに取り入れることができます. たとえば,次のようにします.
\documentclass{jsarticle}
\usepackage{graphicx}
\begin{document}
\begin{figure}[h]
\begin{center}
\resizebox{80mm}{!}{\input{sample_j1}}
\end{center}
\end{figure}
\end{document}

凡例部分がちょっと左に来すぎています. 画像の大きさは\resizeboxの数値を調整することで行うことができます. TeXのファイルとして出力されるので, このファイルに対してであれば日本語を使用することができます. 同時に出力されるepsファイルは,このtexファイルの中で読み込まれています. epsファイルだけを¥includegraphicsで読み込んでみると分かりますが, このepsファイルには座標の数値や関数の式などの文字情報は含まれていません. 格子線と曲線だけの図になっています.

出力された「sample_j.tex」の内容を理解しようとする必要はありません. このファイルの前半では,種々の定義や諸設定が行われてます. グラフ画面に関する内容は, 後半にある¥begin{picture}, ¥end{picture}で囲まれている部分に 書き込まれています.$-2$などの部分は外枠に目盛りを書き入れています. ¥putで座標を指定しているので, 目盛りが書き込まれている箇所の位置が分かります.

\begin{picture}(7200.00,5040.00)%
\gplgaddtomacro\gplbacktext{%
\csname LTb\endcsname%%
\put(744,768){\makebox(0,0)[r]{\strut{}$-2$}}%
\csname LTb\endcsname%%
\put(744,1344){\makebox(0,0)[r]{\strut{}$-1$}}%
\csname LTb\endcsname%%
\put(744,1920){\makebox(0,0)[r]{\strut{}$0$}}%
(以下、略)
たとえば,このファイルを次のように変更してみます.
  1. 座標軸を把握しやすいように,目盛りの「0」を大きくする.
  2. 凡例部分を右に寄せて,「放物線」を書き入れる.
  3. y軸のラベルを回転させないで,軸の上端に移動する.
  4. x軸のラベルを「x軸」にする.
目盛りの数値を大きくするために¥Largeをつけて, 「$0$」を「\Large$0$」としました. 2以降の修正箇所は,ファイルの最後の部分にあります. たとえば,次のように修正します. コメント行の下の部分が修正した部分です。 y軸のラベルが¥rotateboxで回転しているので, それを外して回転しないようにしています. 移動先の座標は,y軸の上端の目盛りの座標を参考にして, ある程度の試行錯誤で決めたものです. いずれにしろ,TeXのファイルなのでTeXのコマンドを使用することができます.
\gplgaddtomacro\gplfronttext{%
\csname LTb\endcsname%%
% \put(216,2783){\rotatebox{-270}{\makebox(0,0){\strut{}y}}}%
\put(216,4799){\makebox(0,0){\strut{}$y$}}%
\put(216,4550){\makebox(0,0){\strut{}軸}}%
% \put(3827,168){\makebox(0,0){\strut{}$x$}}%
\put(3827,168){\makebox(0,0){\strut{}x軸}}%
\csname LTb\endcsname%%
% \put(5696,4616){\makebox(0,0)[r]{\strut{}x**2-2*x}}%
\put(6400,4423){\makebox(0,0)[r]{\strut{}放物線}}%
}%
\gplbacktext

なお,次のようにする方法もあります.

  • set terminal latex
  • set output 'sample_j2.tex'
  • replot
  • set output
  • set terminal wxt
このようにすると,texファイルだけが出力されてepsファイルは出力されません. 出力されたtexファイルを¥inputすることになりますが, グラフ画面が全てTeXのコマンドとして書き込まれているので, ファイルの内容が複雑になって座標を書き入れている箇所などを見つけにくいです. 出力ファイルに修正を加えるのであれば,「epslatex」を指定した方が良いと思います. なお, 「set output」を省略するときは,wxtに戻ってから「replot」してください.

▲戻る(トップメニュー)

■「gnuplot」のリンク集
ここでは,gnuplotの利用法を解説しているWebサイトを紹介します.
  • gnuplotの初歩
    gnuplotの使い方に関して、初歩から曲面の描画まで丁寧に解説されています.
  • 初歩gnuplot入門
    愛知教育大学の数学科の学生向けに, gnuplot4.0.0の使い方が初歩から丁寧に解説されています.
  • gnuplot tips
    gnuplotに関して「〜したい」と思うことが丁寧に解説されています. ただし,2003年の解説なので, 最新版のgnuplotでは動作しないものも含まれています.
  • gnuplot FAQ
    gnuplot ver.5 に関するFAQです.
  • gnuplot
    gnuplotに関する「not so Frequently Asked Questions」です.
  • gnuplotの使い方
    名古屋大学の学生向けの,gnuplotの使い方に関する40ページの解説書です.
  • gnuplotの使い方
    琉球大学工学部電気電子工学科の学生向けの, gnuplotに関する151ページの解説書です.
  • gnuplot:グラフを描く基本ツール
    大阪大学の理学部数学科の学生向けの解説です.
  • gnuplot入門
    明治大学の,おそらくは工学部の学生向けの解説です.
  • gnuplotコマンド集
    gnuplotのコマンドが,機能ごとに分類されて解説されています。
  • Gnuplotによる描画方法全般
    gnuplotのインストールや描画方法の全般にわたり解説されています。
  • gnuplotのepslatexを使ってTeXへ・・・
    「set terminal」で「epslatex」指定のやり方について解説されています.
  • gnuplotを使ったグラフ作成
    実験で得られた離散データの処理の仕方について詳しく解説されています.
  • GNUPLOT:折れ線グラフの作成
    折れ線グラフの作成方法について解説されています.
  • gnuplotスクリプトの解説
    論文で使用する図を作成することを目標に,詳しく解説されています.
  • gnuplot
    いろいろな機能別にコマンドの使い方がまとめられていますが, gnuplotを使いなれた方の備忘録的な内容です.
  • gnuplot|シキノート
    上級向けの記事が多数登録されています. 華麗な曲面グラフを作成するときは参考になります.
  • 可視化の基礎演習
    離散データをもとに,それを可視化するときの様々な技法について解説されています.
  • gnuplot
    gnuplot5.2の公式マニュアルの日本語訳です.
▲戻る(トップメニュー)

copyright