理系ジン

しばらくPythonに力を入れる予定です。

gnuplotについて

概要

gnuplotは、コマンドにより2Dや3Dの数学のグラフを描ける、独自ライセンスのオープンソースソフトです。Windows/Mac/Linux等で動作します。

gnuplot homepageのgnuplot demo plotsDemo scripts for gnuplotを見ると大体どのような事ができるか分かります。

詳細はマニュアルを見て頂くのが良いと思います。ここでは、ポイントを説明します。

インストール

インストールは、gnuplot homepageのDownloadの、ソース、バイナリ:Windows(4.6.5)Mac(4.0.0)でできます。

MacではX11XQuartzのインストールが必要なはずです。

他に、Maxima等の別ソフトと一緒にgnuplotがインストールされることもあります。MaximaをインストールするとWindows版はgnuplot 4.6が、Mac版はgnuplot 4.2が一緒にインストールされます。

対話型操作

次のようにgnuplotを実行すれば、対話型操作モードになります。

  • ターミナルやコマンドプロンプトからgnuplot(パスが未設定ならパスを含めて)と入力
  • Maximaとインストールした場合
    • Macなら/Aplications/Gnuplot.appを開くかLaunchpadでGnuplotをクリック
    • WindowsならC:\Program Files (x86)\Maxima-5.28.0-2\gnuplot\gnuplot.exe等をクリック

対話型操作モードでは、gnuplotコマンドプロンプトが表示されます。

gnuplot> 

例えば、次のように入力すればxを変数とする$y=\sin(x)$のグラフが描画されます。xの範囲はデフォルトで$[-10,10]$であり、yの範囲は自動的に決まります。

gnuplot> plot sin(x)

f:id:rikeizine:20140901203313p:plain

対話型操作の終了は、gnuplotコマンドプロンプトで、exitquitq[control]+dのいずれかを入力します。

グラフをファイル出力

グラフをファイル出力するには次のように設定した後plotコマンドを実行します。

set terminal pngcairo #他にtikz canvas svg pdfなど
set output "C:¥¥test¥¥gnuplot2D.png"

gnuplot 4.4以降は、グラフをJavaScriptcanvasで出力できるようになっています。

canvas出力の表示には、canvastext.jsgnuplot_common.jsgnuplot_mouse.cssファイルが必要です。外部ファイルが必要なのでブログで使うには不便ですね。

Maxima版からは上記3ファイルは省かれています。また、TeXのTikZ出力に必要なプログラムも省かれています。

バッチ操作

バッチ操作をするには、コマンドのスクリプトファイルを作成し、gnuplotプログラムの引数に渡します。

-eオプションで事前に処理するコマンドを渡せ、-persistオプションでグラフを残したままにできます。詳しくはマニュアルを見て下さい。

例:2D

スクリプトファイルgnuplot2D.gp

set terminal pngcairo #他にtikz canvas svg pdfなど
set output "C:¥¥test¥¥gnuplot2D.png"
set xtics 0.5*pi #目盛り
set format x "%4.1Ppi" #値の書式
set grid #グリッド表示
set xtics axis #原点を通る軸にメモリを表示
set ytics axis #3Dでは期待通りにならない
set arrow 1 from 0,0 to pi/2,1 #矢印(ベクトル)
set size square #グラフを正方形に
plot [-pi:pi] sin(x) with points, cos(x), x**0.5 #**は冪

実行

C:\Program Files (x86)\Maxima-5.28.0-2\gnuplot>gnuplot "C:\\test\\gnuplot2D.gp"

ファイルgnuplot2D.png

f:id:rikeizine:20140901204657p:plain

処理の意味は、コメントを見て下さい。

グラフのx軸とy軸の長さを同じにする方法はよく分からないです。多分、x軸とy軸の値の範囲を指定して、set sizeでその範囲に応じた比を指定するのかと思います。

例:3D

スクリプトファイルgnuplot3D.gp

set terminal pngcairo
set output "C:¥¥test¥¥gnuplot3D.png"
set xtics 0.5*pi #目盛り
set ytics 0.5*pi
set format x "%4.1Ppi" #値の書式
set format y "%4.1Ppi"
set grid
splot [-pi:pi] [-pi:pi] sin(x)*cos(y)

実行

C:\Program Files (x86)\Maxima-5.28.0-2\gnuplot>gnuplot "C:\\test\\gnuplot3D.gp"

ファイルgnuplot3D.png

f:id:rikeizine:20140901205823p:plain

splotコマンドを使うと3Dグラフが描画されます。変数x,yとなり、$z=\sin(x)\times\cos(y)$のグラフが描かれます。

理系ジンの意見

簡単にグラフを描けます。gnuplot流と言う感じがします。gnuplot 4.4以降はcanvas出力もできるようになっていますが、外部ファイルが必要でありブログに貼付けるには少し不便です。Maxima付属のgnuplotは手軽に試せます。

ネットに既に多くの解説があるので簡潔な解説にしました。

予定

理系ジンと言う名前の割に狭い内容になっていますが、コンテンツ作成の道具を整理して、徐々にペースを上げて、オリジナルコンテンツやテーマを広げて内容を充実させようと思っています。

参考資料