gnuplotによる対話型グラフ描画:インストール、スクリプト記述、3次元プロットの実例





gnuplotによる対話型グラフ描画:インストール、スクリプト記述、3次元プロットの実例



資料請求番号:SH31

スポンサーリンク

対話型グラフ描画ソフト gnuplotの使い方
(インストールとスクリプトの書き方、極座標表示にも対応)

gnuplotはExcelでは難しいような3次元のグラフを描画するのに便利です。また、比較的簡単なスクリプトの実行によって所望のグラフをすぐに得ることができることが利点です。(逆にスクリプト文法に慣れるのに時間がかかります。)
ここではwindows環境上でgnuplotをインストールする方法と具体的な使い方を説明します。

使い方はこちらから

実践はこちらから(コマンドの意味についての詳細など)

※説明のあるコマンド(コマンドを調べに来た人へ こちら

・媒介変数表示の書き方
・媒介変数の定義域の指定
・デカルト座標の定義域の指定
・立体メッシュの粗さ設定
・z軸上のx-y平面の位置の決定
・xyz軸の比率を同じにする
・グラフの枠を消す
・軸の目盛りを軸上に書く
・軸上の目盛りを消す
・指定の軸に色をつける
・3次元グラフを表示したときに見る角度を指定する
・凡例を消す
・タイトルをフォントとフォントサイズを指定してつける

インストール

windows上でgnuplotを使用するにはwgnuplotをダウンロード、インストールする必要があります。(インストールはなんとなーくでできます。インストール慣れしている方はこちらをクリックして飛ばしてください。)

①まずはgnuplotのHPへ行き、ダウンロードページに行きます。

(2017年4月20日現在)

gp506-win32-mingw.exeをクリックしてダウンロードを開始

「ファイルを保存」をクリックします。

ダウンロードが終わったら、お使いのブラウザのダウンロードボタン(firefoxでは右上の矢印、chromeでは左下)をクリックして、インストールファイルを実行。

※スクショ失敗して何度かやり直しました(笑)

そしたら、最初にこの画面が出てくるので、使用したい言語を選んでください。嬉しい日本語対応です。

同意して進む

2回次へ進む

ここで、日本語対応のところにチェックをいれてください。

連続して次へ次へ進んでいきます。この際、「デスクトップ上にアイコンを作成する」にチェックを入れておくと起動が便利です。

 

「インストール」をクリックします。

次へをクリック

これで「完了」を押せばインストール完了です。お疲れさまでした。


対話的使用法

wgnuplotを立ち上げるとこんな画面になります。

ここで「plot sin(x)」と入力してみてください。

そしたらy = sin(x)を描いてくれます。gnuplotの言葉で「sin(x)を描いてね」と指示すれば、その通りにグラフを描画してくれるのです。これがgnuplotは対話型グラフ描画ソフトと言われる理由です。Excelのように、たくさんセル使って、あるxの時のyの値を羅列しなくてもいいというのは便利です。

さらにこのように3次元のグラフも「splot x*x+y*y」と入力するだけで取得できます。3次元の場合は「splot」ですので注意してください。このsはsurfaceでしょうか?

スクリプトを使った方法

グラフを描いていると、縦軸の定義域はこれくらいで、グラフの色は、曲面を描く場合はメッシュがいいのかソリッドがいいのか、凡例つけたい、x軸ラベルをつけたい、グラフそのものの大きさを変えたい、3次元の場合は見る角度を変えたい・・・・

など色々と注文がでてきます。その度にそれにあったコマンドを入力するのも大変なので、コマンド集をテキストエディタ(メモ帳など)で作って、それをワンクリックで実行できるようになれば便利ですね。そのコマンド集をスクリプトと呼びます。スクリプトの実行方法は簡単で、コマンドをメモ帳に書いて、そのメモ帳を下のgnuplot画面にドラック&ドロップするだけで実行されます。


gnuplot実践

ここではgnuplotを使って、少し複雑な図形を描いてみたいと思います。

私の記事「シュレディンガー方程式から求められる電子軌道を描く」でたくさん電子軌道を描きましたが、これはすべてgnuplotで描かれたものです。

[blogcard url=”http://shimaphoto03.com/science/sch-equ/”]

ここでは、3dxz軌道を描いた手順を紹介します。

描きたい式

|dxz|2が描きたい式です。まず、これは極座標表示になっていますので、gnuplotに媒介変数を使って描くよ。と教えてあげなければなりません。また、r =(r,θ,φ)をx =(x,y,z)に変換しなければいけません。

gnuplotにおける極座標

通常、極座標は以下のようにデカルト座標上で表現されますが

gnuplotの場合、極座標の定義がこのようになっています。

θの位置が違うのです。なので、sinθはcosθに、cosθはsinθになります。sinとcosがちょうど入れ替わった形になります。

描画

まずは、とりあえず、式だけを入れて実行してみました。

set parametric

a=15/(4*pi)
g(u,v)=cos(v)*cos(v)*sin(v)*sin(v)*cos(u)*cos(u)

fx(u,v)=cos(u)*cos(v)
fy(u,v)=sin(u)*cos(v)
fz(v)=sin(v)

splot  a*g(u,v)*fx(u,v),a*g(u,v)*fy(u,v),a*g(u,v)*fz(v)

pause -1

そしたらこんな図が出てきました。

・・・なんかそれっぽい形ではあるんですが、もうちょっと体裁よく描けないの??って思いますよね。それでは、gnuplotに具体的な指示をして、思い通りのグラフを描きましょう。

※サンプルプログラムここから※

len = 0.5
#座標軸長さ定義
set parametric
#式を媒介変数(今回の場合、θとΦ)で記述します。
set angle degree
#角度は°で表示します
set urange [0:360] #u(φをuで表示します)は0~360°を定義域にします。
set vrange [0:360] #v (θをvで表示します)は0~360°を定義域にします。
set xrange [-len:len] #x軸の長さは-0.5~0.5です。(len = 0.5)
set yrange [-len:len] #y軸の長さは-0.5~0.5です。(len = 0.5)
set zrange [-len:len] #z軸の長さは-0.5~0.5です。(len = 0.5)
set isosample 36,36
#立体のメッシュの細かさはこのくらいで
set ticslevel len/(-len-len)
#z軸におけるx-y平面の位置はこのくらいで(詳細は後述)
set view equal xyz
#xyz軸の比率は同じにしてください
unset border
#グラフの枠は要りません
set xtics axis
#x軸の目盛りはx軸上に書いてください。
set ytics axis
#y軸の目盛りはx軸上に書いてください。
set ztics axis
#z軸の目盛りはx軸上に書いてください。
unset xtics
#x軸の目盛りは要りません。
unset ytics
#y軸の目盛りは要りません。
unset ztics
#z軸の目盛りは要りません。
set zeroaxis ls -1
#軸のスタイル(line style)はスタイル-1にしてください。
set yzeroaxis lc rgb “red” lt 2
#y軸は赤色にしてください。軸のタイプ(line type)は2にしてください。
set view 60,45 #x軸方向に60°、z軸方向に45°傾けた形で描画してください。

#ここから数式を書きます。

#φをuで表示します。
#θをvで表示します。

a=(15/(4*pi))
g(u,v)=cos(v)*cos(v)*sin(v)*sin(v)*cos(u)*cos(u)

#gnuplot式の極座標ではcosとsinが入れ替わっていることに注意しながら式を書きます。

fx(u,v)=cos(u)*cos(v)
fy(u,v)=sin(u)*cos(v)
fz(v)=sin(v)

#上記同様、sinとcosを入れ替えて書きます。

splot  a*g(u,v)*fx(u,v),a*g(u,v)*fy(u,v),a*g(u,v)*fz(v)

#表式です。
set nokey
#凡例を消します。
set title font “Times New Roman,25”
#タイトルのフォントをTimesにしてフォントサイズを25にします。
set title “l = 2, m = 1, 3dxz”
#タイトルは” “内のようにつけてください

※サンプルプログラムここまで※

このスクリプトを実行するとこんなグラフが得られます。

なんかそれっぽい感じになりましたね。

本当は、gnuplotに指示して、「x」「y」「z」の文字を描きたかったのですが、挫折してしまいました。

あと、z軸におけるx-y平面の位置を指示するset ticslevelなのですが、こいつが曲者で0と書いてもz=0にx-y平面を置いてくれませんでした。おきたい場所をaとするなら、以下の式に従って指示します。

(a-z軸の最小値)/(z軸の最小値-z軸の最大値)

多くのサイトでset ticslevelをゼロにすればz=0にx-y平面を置けるよ。と書いてあるのですが、それはz軸の最小値が0の場合に限ります。

上記を教えてくれたサイトを感謝の意味も込めて紹介します。

外部リンク:Gnuplot入門 水平面(座標が書かれる面の位置の変更)

まとめ

今回は対話型グラフ描画ソフトgnuplotの紹介、インストール方法の説明、基本的使い方の説明、スクリプトを使用した描画方法の説明をして、実践として電子軌道の一つである3dxz軌道を描画するスクリプトを紹介しました。また、何か面白い使い方を見つけたら随時更新します。

shimakei8364

View Comments

  • 大学の授業の宿題でまさに作図を行うもので、ぐにゅプロットの使い方をあまり理解していなかったのでとても助かりました。