gnuplot のコマンドプロンプトからの使い方のメモを整理しておくことにしました.
コマンドプロンプトから使う
インストール (2012.03.13 修正)
- 「gnuplot homepage」より,「gp460-win32-setup.exe」をダウンロードし,実行する.
- インストールするフォルダを,c:\gnuplotとすれば,以下のフォルダが作成される.
gnuplot-----bin
|
+--contrib
|
+--demo
|
+--docs
|
+--etc
|
+--license
|
+--share
|
概要
gnuplot をインストールしたら,環境変数で「;c:\gnuplot\bin」(cドライブにインストールした場合)を追加し,パスを通すことを忘れないで下さい.
事前に gnuplot のコマンドを記載した「gpl_***.txt」というテキストファイルと,ブランク区切りのデータファイルを準備します.DOS のコマンドプロンプトを起動したら,コマンド記載ファイルとデータファイルを保存しているディレクトリに移動し,以下のコマンドを入力します.なおコマンド記載ファイルの拡張子は自由につけられますが,ここでは「gpl_***.txt」としています.(gnuplot の説明書での拡張子は「.gp」か「.plt」のようです.)
一度に多くの処理をしたい場合は,例えば下のような「a.bat」というバッチファイルを書いて,これを実行すれば手間がかかりません.
なお,バッチ処理するのであれば,wgnuplotよりもgnuplot(pipeを使えるconsole mode)の方がいいみたいです.(2011.01.24追記)
gnuplot gpl_png_test.txt
gnuplot gpl_ps_test.txt
rem
gnuplot gpl_sample_line1.txt
gnuplot gpl_sample_line2.txt
gnuplot gpl_sample_point.txt
gnuplot gpl_sample_plot.txt
gnuplot gpl_sample_label.txt
gnuplot gpl_sample_BC.txt
gnuplot gpl_sample_vector1.txt
gnuplot gpl_sample_vector2.txt
gnuplot gpl_day_test.txt
gnuplot gpl_sample_polar.txt
gnuplot gpl_sample_bigf.txt
rem
gnuplot gpl_test0.txt
gnuplot gpl_test1.txt
gnuplot gpl_test2.txt
gnuplot gpl_test3.txt
gnuplot gpl_test4.txt
gnuplot gpl_test5.txt
gnuplot gpl_test6.txt
gnuplot gpl_test7.txt
gnuplot gpl_test8.txt
gnuplot gpl_test9.txt
gnuplot gpl_CHtest.txt
gnuplot gpl_TRS.txt
|
注意
- Windows Vista では,gnuplot のヘルプが利用できない場合があります.これは,Microsoft のヘルプによれば「Vista では WinHlp32.exe が Windows に含まれていないため!」なのだそうです.この場合,http://support.microsoft.com/kb/917607 にアクセスして,Windows6.0-KB917607-x86.msu をダウンロード・インストールすることにより解決できました.
- 画像は png 形式の出力にしています.
- postscript での出力も可能です.postscript のターミナル・テストを参照.
pngのターミナル・テスト
出力ターミナルを png とした場合の「test」コマンド実行結果です.出力ターミナルが「windows」の場合は,線色の並びが異なりますので注意.
線色のテスト(デフォルト:linetype)
出力ターミナルをpngとし,「linetype」を変化させた場合の線色のサンプルです.黒線は「linetype -1」です.「linetype 0」は点線ですが「linewidth 1」の場合でないと表現できないようです.
線色再定義のテスト(linetype)
線色を16進数で再定義したものです.
プロット記号のテスト(pointtype)
出力ターミナルを png とし,「pointtype」を変化させた場合のプロット記号のサンプルです.「pointtype 0」は「dots」と同じ(小さい点)です.
ここでは「test-point.txt」を読み込んで,y軸値を plot コマンド内で変化させて記号をプロットしています.
プロット色は,デフォルトの linetype と pointtype の数値を合わせることにより変化させています.「pointtype 0」(小さい点)の色は「linetype -1」(黒)としました.
プロットスタイルのテスト(with points etc.)
ここでは,1つのコマンド記述ファイルで8個のグラフを書かせています.一部0軸を入れる試行も行っています.
ラベルのテスト(label)
ここでは,ラベルの座標系,描画の基準位置,回転の動作確認を行っています.
棒グラフのテスト(with boxes)
棒グラフの作成テストです.色で塗りつぶすものと,パターンで塗りつぶすものの2種類を作成してみました.
ベクトル図のテスト(with vector)
ここでは,媒介変数(角度を示す変数は「t」)を用いて円を描き,その上に外部の入力ファイルに格納したベクトル描画用データをプロットしています.
データファイルの区切り文字は”, ”です.データの並びは以下のとおりで,4 列並びです.3・4 列は終点座標ではなく,始点からの増分を指定することに注意します.
始点x座標 , 始点y座標 , x増分 , y増分
|
出力図 (1) では矢印を,出力図 (2) では (1) と同じ矢印に加え,nohead の矢印を用いた直線描画も取り入れてみました.
# 矢印の描画
set style arrow 1 size graph 0.05,20 empty linewidth 2
set arrow as 1 from -1,0 to 1,0
# 4本の直線(nohead矢印)による正方形の描画
set style arrow 2 size graph 0.05,20 filled nohead linewidth 1 linetype 3
set arrow as 2 from 5,-5 to 5, 5
set arrow as 2 from 5, 5 to -5, 5
set arrow as 2 from -5, 5 to -5,-5
set arrow as 2 from -5,-5 to 5,-5
|
横軸日付グラフのテスト(set xdata time)
横軸を日付としたグラフの作成テストです.ここ 20 年間の前橋の月平均気温,月最高気温,月最低気温,月間雨量をプロットしています.いずれも各月 15 日を入力日としました.データは気象庁 HP よりダウンロードしました.日付値は 90 度回転にしていますが,このままだとグラフ内に食い込むので,「set xtics offset 0,-4 rotate by 90」と offset で平行移動させています.
また,x軸ラベル「Date」も「set xlabel "Date" offset 0,-1.5」で移動させています.
データファイルは拡張子は「.txt」ですが,csv 形式です.
極座標プロットのテスト(set polar)
ここでは,極座標プロットの動作確認を行っています.角度を示す変数は「t」です.
「"-"」を用いて配列を読み込ませていますが,データ並びは(角度,半径座標)です.
「rrange」で半径方向の座標範囲を指定した「つもり」ですが,最大値側は指定通りにならず大きめのものをプロットしてくれています.
半径方向座標がマイナスのデータがある場合,これを指定しないと,マイナス側が表示されないようです.
大型csvファイルの作図テスト
ここでは,次のような,振動関連データを格納した大型csvファイルの作図テストを行っています.6行目以下がデータであり,データ行は0〜119999,すなわち10列×12万行からなるカンマ区切りのテキストファイルで,ファイルサイズは8.7MBです.
ここでは,通常のブランク区切りではなく,敢えてカンマ区切りの読み込み実験もかねており,コマンド記載ファイルでは,データ区切り文字を”,”に変更しています.また,サンプリングピッチが0.01秒なので,x値(1列)を0.01倍し,y値を4列としてプロットしました.問題なく作図できています.
・・・・・
set datafile separator "," #データ区切り文字を変更する
・・・・・
#1列(x値)を0.01倍,y値を4列としてプロット.
plot "bigf_csv.txt" using ($1*0.01):4 with lines linetype 4 notitle
|
大型csvファイルの書式例
01 | #test_data_csv
02 | #ndata,120000
03 | #dt,0.01
04 | #t0,0.0
05 | #i,Pu,Pd,A1,A2,A3,A4,A5,A6,B1
06 | 0,-0.0008,0.0118,0.1496,0.0103,0.0596,0.1692,0.1138,0.0240,-0.1913
07 | 1,-0.0008,0.0038,0.0209,0.0618,-0.0434,-0.1141,0.0880,-0.1047,0.0147
08 | 2,0.0012,0.0098,0.0209,0.0103,0.1626,0.1434,0.1395,0.1270,-0.1141
09 | 3,-0.0008,-0.0142,-0.1079,-0.2987,0.0596,-0.1656,-0.0407,0.1270,0.0404
・・・・・
|
postscriptのターミナル・テスト
出力ターミナルを postscript とした場合の「test」コマンド実行結果です.白黒出力の ps ファイルができあがり GSview で見ることができますが,ここでは TeX を介して pdf 化したものも載せておきます.
TeX 文書は以下のようなものです.できあがった dvi ファイルを dvipdfm.exe で pdf 化します.
\documentclass[a4paper,10pt]{jsarticle}
\usepackage[dvipdfm]{graphics,graphicx}
\pagestyle{empty}
\begin{document}
\includegraphics[width=150mm]{fig_ps_test.ps}
\end{document}
|
postscript eps の出力事例
出力ターミナルを postscript eps とした場合の出力事例です.TeX に貼り付けると,png 画像との差は歴然としており,eps のすばらしさを見直しています.
ここでは,gnuplot がはき出した eps ファイルを InageMagick の convert -density 300 で png ファイルにして掲載しています.
基本的なグラフを描くawkスクリプトの事例 (eps 出力)
出力ターミナルを postscript eps enhanced とした場合の出力事例です.
FEM の出力などの表形式 csv ファイルから awk でデータを読み込み,簡単な計算処理をしながら gnuplot のコマンド記述ファイルを吐き出して実行します.
awk スクリプトと gnuplot の実行は,バッチファイルにて行います.
gnuplot のコマンド記述ファイルは,大量のデータを伴っているので,省略しています.
ここでは,gnuplot がはき出した eps ファイルを InageMagick の convert -density 300 で png ファイルにして掲載しています.
awk と gnuplot 実行用バッチファイル
gawk -f awk_draw.awk out_result_test_1.csv > gpl_draw.txt
gnuplot gpl_draw.txt
|
awk スクリプト,入力ファイルと作成したグラフの事例
png 画像での日本語ラベル表示
注意
- ここでは,本家の英語版 gnuplot により,png 画像で日本語ラベルを表示するテストを行っています.
- コマンド記述ファイルを作成し,これを gnuplot.exe あるいは wgnuplot.exe に読み込ませることにより,png 画像ファイルを作成しています.
- ここでは,font を指定可能な label において,c:\Windows\Fonts にあるフォントを直接指定することにより日本語表示を行っています.
- 当然のことながら,指定するフォルダに,指定したフォントがインストールされていなければ,日本語表示はできません.
- 重要なことは,コマンド記述ファイルをUTF8Nで保存することです.それ以外ではうまくいかないようです.
日本語ラベル表示事例
- ここでは以下のフォントでテストを行っています.
フォント名 | ファイル名 |
MS ゴシック | msgothic.ttc |
メイリオ | meiryo.ttc |
IPA P ゴシック | ipagp.ttf |
IPA ゴシック | ipag.ttf |
Microsoft JhengHei | msjh.ttf |
Microsoft YaHei | msyh.ttf |
AR 丸ゴシック M | JGTR00M.TTC |
HG 丸ゴシック M-PRO | HGRSMP.TTF |
HG 平成角ゴシック体 W3 | HGRHG3.TTC |
HG ゴシック M | HGRGM.TTC |
Arial Unicode MS | ARIALUNI.TTF |
- msgothic では,縦軸の表示がうまくできていません(横書きを90度回転させた出力を期待しているのに,「下からの縦書き?」になっている).またローマ字部も漢字と同じ等幅フォントが適用されており,見栄えも良くありません.msgothic.ttc には,等幅,プロポーショナル,UI が含まれており,そのまま呼び出すと英数字も含め等幅が適用されると言う事なのでしょう.
- msgothic 以外は,うまく表示されています.
- 拡張子が ttc あるいは TTC のフォントは最初に等幅が適用されるようですが,msgothic 以外は,日本語は等幅,欧文は半角等幅あるいはポロポーショナルであり,それほどおかしくない表示ができると言う事なのでしょう.
- Windows XP でも meiryo などのフォントがインストールされていれば,うまく表示できます.
- XP用の meiryo フォントは,Microsoft の HP にあります( Google にて xp meiryo でヒットします).ここの, VistaFont_JPN.EXE を,ダウンロード・実行することにより,meiryo フォントがインストールされます.
- 作成された画像を見ると,「日本語」の「語」という漢字で,日本語フォント(msgothic,meiryo)は「ごんべん」の「なべぶた」部分が横線なのに対し,中国語フォント(msjh,msyh)は縦線になっています.画質だけでなく,微妙なところで何を使うかを選択する必要がありそうです.WANtaro 的には meiryo か.
eps 画像での日本語ラベル表示
注意
- ここでは,本家の英語版 gnuplot により,eps 出力で日本語ラベルを表示するテストを行っています.
- コマンド記述ファイルを作成し,これを gnuplot.exe あるいは wgnuplot.exe に読み込ませることにより,eps 画像ファイルを作成しています.
- コマンド記述ファイルは,EUC,SJIS,UTF8N のフォントを指定し,それぞれのコードで保存する必要があります.
- Ghostscript をインストールするときに,Use Windows TrueType fonts for Chinese, Japanese and Korean のチェックを忘れないようにします.これにより,¥gs¥gs9.00¥lib の cidfmap を書き換えて日本語を表示できるようにしてくれます.
- gnuplot が作成した eps ファイルは,それぞれの文字コードで保存されますが,TeX に貼り付けて SJIS で保存し,dvipdfmx で pdf 化しましたが,EUC と UTF8N はうまくいっているようです.SJIS では gnuplot がはき出した eps の段階で,文字化けが発生しています.
日本語表示事例
eps 説明図作成事例
postscript eps での極座標活用(埋設鉄管・圧力水路)
出力ターミナルを postscript eps として,極座標で説明図を描いた事例です.いずれにしてもこのような図を Wo*d や Exc*l で描画する気にはなれません.
eps カラー FEM メッシュ色塗り画像 (polygon 使用)
出力ターミナルを postscript eps color として,set object polygon を用いて,FEM 応力解析結果の主応力値に応じて色分けする図です.この解析では1要素4積分点のものを使っているので,1要素を4分割して各積分点の主応力値の大きさに応じて色分けしています.
ここでは,C 言語によるプログラムと最終的に作成したpng画像を掲示しておきます.eps ファイルは数 MB になりますので png に変換して使用したほうが良いようです.
polygon では,座標と指定領域を塗りつぶす指定を2行で指定する必要があること,座標は閉じている必要があることに注意が必要です.ここでは四角形を塗りつぶしたいので閉じた座標とするため5組の (x,y) 座標を指定しています.
set object 1 polygon from 8.000,0.000 to 8.050,0.000 to 8.038,0.318 to 7.988,0.314 to 8.000,0.000
set object 1 fillcolor rgb "0000ff" fillstyle solid 1.0
set object 2 polygon from 8.100,0.000 to 8.088,0.318 to 8.038,0.318 to 8.050,0.000 to 8.100,0.000
set object 2 fillcolor rgb "#0000ff" fillstyle solid 1.0
|
凡例は rect で指定していますが,この場合は,1行で座標と指定領域の塗りつぶし指定を行えます.
set object 2492 rect from graph 1.05,0.40 to graph 1.1,0.45 fillcolor rgb "#ff0000" fillstyle solid 1.0 border -1
|
最後に作図を実行させるため,plot 命令を使っていますが,ここではダミーとして作図領域の隅に dot を打っています.
plot "-" with dots notitle
0.000 0.000
50.000 0.000
50.000 50.000
0.000 50.000
0.000 0.000
e
|
png 画像作成のバッチファイルの中身は以下の通りです.ImageMagick で余白を削除 (trim) しながら density 300 で eps を png に変換しその後 50 ピクセルの余白をつけて仕上げています.余白をつける時点で透過 png が指定した背景色の画像に変換されます.
gcc -o gccMESH4nod-pg.exe gccMESH4nod-pg.c
gccMESH4nod-pg out4rand19h.csv fig_pg_test2.eps
gccMESH4nod-pg out_test.csv fig_pg_test3.eps
convert -trim -density 300 fig_pg_test2.eps fig_pg_test2.png
convert -trim -density 300 fig_pg_test3.eps fig_pg_test3.png
convert fig_pg_test2.png -bordercolor "#ffffff" -border 50x50 fig_pg_zw_test2.png
convert fig_pg_test3.png -bordercolor "#ffffff" -border 50x50 fig_pg_zw_test3.png
|
eps カラー FEM メッシュ色塗り画像 (filledcurve 使用)
出力ターミナルを postscript eps color として,plot と filledcurve を用いて,FEM 応力解析結果の主応力値に応じて色分けする図です.この解析では1要素4積分点のものを使っているので,1要素を4分割して各積分点の主応力値の大きさに応じて色分けしています.
ここでは,C 言語によるプログラムと最終的に作成したpng画像を掲示しておきます.eps ファイルは数 MB になりますので png に変換して使用したほうが良いようです.
plot と filledcurves を使う場合は,まず線の色を set style line で指定します.
set style line 1 linetype rgb "#0000ff" linewidth 1
set style line 2 linetype rgb "#0033ff" linewidth 1
set style line 3 linetype rgb "#0066ff" linewidth 1
set style line 4 linetype rgb "#0099ff" linewidth 1
set style line 5 linetype rgb "#00ccff" linewidth 1
set style line 6 linetype rgb "#00ffff" linewidth 1
set style line 7 linetype rgb "#ffff00" linewidth 1
set style line 8 linetype rgb "#ffcc00" linewidth 1
set style line 9 linetype rgb "#ff9900" linewidth 1
set style line 10 linetype rgb "#ff6600" linewidth 1
set style line 11 linetype rgb "#ff3300" linewidth 1
set style line 12 linetype rgb "#ff0000" linewidth 1
|
plot 命令の中で filledcurves linestyle を指定することにより,定めた色で囲まれた領域を塗りつぶします.この場合の座標指定も5点の閉じた領域を指定しています.
plot ¥
"-" with filledcurves linestyle 1 notitle,¥
"-" with filledcurves linestyle 1 notitle,¥
"-" with filledcurves linestyle 1 notitle,¥
・・・・・
8.000 0.000
8.050 0.000
8.038 0.318
7.988 0.314
8.000 0.000
e
8.100 0.000
8.088 0.318
8.038 0.318
8.050 0.000
8.100 0.000
e
8.075 0.636
8.025 0.632
8.038 0.318
8.088 0.318
8.075 0.636
e
・・・・・
|
png 画像作成のバッチファイルの中身は以下の通りです.ImageMagick で余白を削除 (trim) しながら density 300 で eps を png に変換しその後 50 ピクセルの余白をつけて仕上げています.余白をつける時点で透過 png が指定した背景色の画像に変換されます.
gcc -o gccMESH4nod-fc.exe gccMESH4nod-fc.c
gccMESH4nod-fc out4rand19h.csv fig_fc_test2.eps
gccMESH4nod-fc out_test.csv fig_fc_test3.eps
convert -trim -density 300 fig_fc_test2.eps fig_fc_test2.png
convert -trim -density 300 fig_fc_test3.eps fig_fc_test3.png
convert fig_fc_test2.png -bordercolor "#ffffff" -border 50x50 fig_fc_zw_test2.png
convert fig_fc_test3.png -bordercolor "#ffffff" -border 50x50 fig_fc_zw_test3.png
|
eps カラー FEM 節点値の3次元プロット[1] (splot 使用)
出力ターミナルを postscript eps color として,splot を用いて,FEM 熱伝導解析結果の節点温度をプロットする図です.熱伝導や浸透流解析では節点値が求まるので各要素の4節点の値を連続的に表示してみました.
コマンド記述ファイルは以下の通り単純です.
reset
set terminal postscript eps enhanced color font "Arial" 12
set output "fig_CPT_splot.eps"
#
set size ratio -1
#
set xrange [0.000:50.000]
set yrange [0.000:50.000]
set zrange [0.000:19.999]
set ticslevel 0
#
splot "data_temp_ondo.prn" with lines notitle
#
quit
|
splot で読み込むファイル (ここでは data_temp_ondo.prn) は以下の構成です.要素を構成する4節点のx座標,y座標,温度値を(x,y,z)の組として,閉じた四辺形になるよう入力し,2行の空白行をいれています.空白1行ではうまくいきませんでした.
8.000 0.000 0.000
8.100 0.000 0.358
8.075 0.636 0.358
7.975 0.628 0.000
8.000 0.000 0.000
7.975 0.628 0.000
8.075 0.636 0.358
8.000 1.267 0.358
7.902 1.251 0.000
7.975 0.628 0.000
7.902 1.251 0.000
8.000 1.267 0.358
7.876 1.891 0.358
7.779 1.868 0.000
7.902 1.251 0.000
・・・・・
|
png 画像作成のバッチファイルの中身は以下の通りです.ImageMagick で余白を削除 (trim) しながら density 300 で eps を png に変換しその後 50 ピクセルの余白をつけて仕上げています.余白をつける時点で透過 png が指定した背景色の画像に変換されます.
eps ファイルの大きさは69kBですので,そのままTeXに張り込んでも問題ないと思います.
gcc -o gccONDO4-splot.exe gccONDO4-splot.c
gccONDO4-splot out_CPT_ondo.csv fig_CPT_splot.eps
convert -trim -density 300 fig_CPT_splot.eps fig_CPT_splot.png
convert fig_CPT_splot.png -bordercolor "#ffffff" -border 50x50 fig_zw_CPT_splot.png
|
eps カラー FEM 節点値の3次元プロット[2] (splot 使用)
[1] であつかった図は,ただプロットしたのみで結果の良否を視覚的に見るだけにしか使えません.
軸や凡例,要素別の色塗りなど,少し実用的な図を作ってみました.
コマンド記述ファイルは以下の通りです.(一部省略)
reset
set terminal postscript eps enhanced color font "Arial" 12
set output "fig_ondo_splot_dbl.eps"
#
set size ratio -1
#
set xrange [0.000:50.000]
set yrange [0.000:50.000]
set zrange [0.000:19.999]
#
# ラベル指定.
# y軸ラベルは左に-3,上に1移動.
# z軸ラベルは右に5移動し90℃回転./Symbolを用いて(℃)を表示
set xlabel "x-direction (m)"
set ylabel "y-direction (m)" -3,1
set zlabel "Temperature ({/Symbol \260}C)" 5,0 rotate by 90
#
# set object polygon で要素の(x,y)座標と節点温度値(z)を3次元で指定し,色を塗る.
set object 1 polygon from 4.000,0.000,0.000 to 4.100,0.000,0.459 to 4.087,0.322,0.459 to 3.988,0.314,0.000 to 4.000,0.000,0.000
set object 1 fillcolor rgb "#FF00CC" fillstyle solid 0.2
set object 2 polygon from 3.988,0.314,0.000 to 4.087,0.322,0.459 to 4.050,0.641,0.459 to 3.951,0.626,0.000 to 3.988,0.314,0.000
set object 2 fillcolor rgb "#FF00CC" fillstyle solid 0.2
・・・660要素分繰り返し・・・
set object 660 polygon from 3.727,47.354,10.001 to 3.923,49.846,10.001 to 0.000,50.000,10.001 to 0.000,47.500,10.001 to 3.727,47.354,10.001
set object 660 fillcolor rgb "#FFFFE0" fillstyle solid 0.5
#
# x-y平面上に凡例用の四辺形を描画
set object 661 polygon from 5.000,8.750 to 10.000,8.750 to 10.000,11.250 to 5.000,11.250 to 5.000,8.750
set object 661 fillcolor rgb "#FFFFE0" fillstyle solid 0.5 border lt 1 lw 0.2
set object 662 polygon from 5.000,13.750 to 10.000,13.750 to 10.000,16.250 to 5.000,16.250 to 5.000,13.750
set object 662 fillcolor rgb "#FF00CC" fillstyle solid 0.2 border lt 1 lw 0.2
#
# x-y平面上に凡例用のラベルを描画
set label "Bed rock" at first 11.25,first 10 left
set label "Concrete" at first 11.25,first 15 left
#
set ticslevel 0
#
# splotコマンドで赤いメッシュをかぶせる
splot "data_temp_ondo.prn" with lines lt 1 lw 0.5 notitle
#
quit
|
eps その他説明図作成事例
設計計算書などに載せる簡単な説明図の作成事例です.
いずれも,eps 出力画像を,ImageMagick を用いた以下のコマンドで png 画像化しています.
mogrify -trim -density 300 -bordercolor "#ffffff" -border 50x50 -format png *.eps
|
このような図を作成する場合,寸法線や,荷重を示す記号など,矢印の使い方がポイントになります.
色々な矢印の定義方法は,
米澤 進吾さんのページ
に詳しい解説があります.
矩形フーチングに作用する荷重の説明図
基礎杭の配置平面図
円形鉄筋コンクリート断面
鉄筋は,filledcurves を用い黒く塗りつぶしています.
Spangler のモデル図
土中埋設管の設計に用いられるSpanglerの式のモデル図を作成してみました.