しままるの雑記帳

しままるの思ったことや考えたことをアウトプットする場。「PC/プログラミング」「写真/旅行」「科学(勉強)」「心の問題」が主なテーマ。

プログラミング 科学

[備忘録] gnuplotのダウンロード・インストール方法と使い方

投稿日:2017年4月20日 更新日:

対話型グラフ描画ソフト 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で描かれたものです。

ここでは、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軌道を描画するスクリプトを紹介しました。また、何か面白い使い方を見つけたら随時更新します。

-プログラミング, 科学

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ベクトル解析の公式を証明する

目次1 公式その1 ∇・(∇×A) = 01.1 ① ∇×A1.2 ② ∇・(①)2 公式その2  ∇×∇×E = ∇(∇・E) – ∆E2.1 ① ∇×∇×E2.2 ② ∇(∇・E)2. …

あなたのこころが苦しい理由はズバリ「脳のケガ」です

目次1 本の紹介1.1 本の概要1.2 書評(しままるの感想)2 精神医療の現状3 MRI概要4 「松澤の断層法」概要5 松澤先生のロジック5.1 松澤の断層法の誕生5.2 認知症患者の扁桃体の傷5. …

【初心者向け図説】Linuxを使おう!(スマホ版)

プログラミング開発に便利な無料OS、Linuxを使おう ※本ページはスマホ版になっております。パソコンの方はこちら  Linuxと言う言葉を聞いたことがありますか?この記事ではLinuxでどんなことが …

[備忘録] htmlにおけるベージ内ジャンプの方法

目次1 ページ内リンクのプログラム2 サンプルプログラム2.1 プログラムの説明3 動作確認4 使用例5 応用例5.1 応用例 動作確認 ページ内リンクのプログラム  ブログを書いていて、とりあえず結 …

[比較]モバイルルーターどっちにしよう?(y-mobileとwimax)

目次1 結論から言えば、UQ-mobile2 価格(支払金額、料金システム)2.1 利用料金の中身のカラクリ2.2 きわめて不便な使い放題(305ZTの場合)2.3 1GB/3日の制限(305ZTの場 …

管理人


名前:しままる
年齢:20代後半
趣味:写真、科学の勉強
好きなもの:動物、新幹線、飛行機
元職業:メーカー技術系職員
現職業:好きな場所・好きな時間で働く自由人

お問い合わせはこちら

↓最近の記事