サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
夏の料理
t16web.lanl.gov
gnuplot 入門 --- 基本の基本編 --- 起動から終了まで gnuplotは多くのプラットフォーム(OS)に移植されていますので,使い方 の詳細はプラットフォームによって少々変わってきます.ここでは,UNIXの X11からgnuplotを使う方法を説明しますが,他のOSで使う場合も基本的な部分 は変わらないはずです. まずコマンドラインからgnuplotを起動します.クレジットが表示された 後,"gnuplot> " というプロンプトが表示されます.これがgnuplot のコマンドラインで,ここにコマンドを対話的に入力しながら作業を進めます. % gnuplot G N U P L O T Version 4.0 patchlevel 0 last modified Thu Apr 15 14:44:22 CEST 2004 System: Linux 2.4.23 Copyr
幾つかのものは組み合わせて指定できます.outside bottomなら, 右外側の下の方に凡例が表示されます. 凡例を表示する座標を, 直接指定することもできます. gnuplot> set key 100,100 なら,(X,Y)=(100,100)の位置に表示されます.一つ目の凡例の, 表題と点や線の真中が,このときの座標になります.この座標はプロットしている XY軸の数値と一致しています.プロットに関係なく任意の座標での位置を 与えるには,座標系の項目を参照してください. 凡例の中の誤差棒を消したい. 誤差付きのデータをプロットすると,凡例中の記号にも誤差棒が付きます が,Y-方向に誤差があっても凡例中ではX-方向になってしまいます.これなら 誤差棒が無い方がマシなので,これを表示させないようにします.あいにくと うまい方法が思い付かないので,次のようにしてみました. 次のデータ(
UNIXのコマンドを利用する. gnuplotはデータファイルの中身を加工しな がらプロットすることができますが,gnuplotだけでは限界があります. 例えば,X座標がa.dat,Y座標はb.datというように,データが複数のファ イルに分れていたり,特定の数値だけを修正するような場合です.あら かじめデータファイルをエディタで編集してgnuplot 用のデータを用意す るのが本筋ですが,ここではUNIXのコマンドを利用する方法を幾つか紹介 します. ここで取り上げているのは,以下のコマンドです. sort paste sed awk sort sortコマンドを使って,複数のファイルを連結して混ぜ合わせる ことができます.
図の中に図を描きたい グラフ中の空いた部分に,別の小さな図を描いてみましょう.よくあるの は,図の込み入った部分の拡大図を作るものです.複数の図を同時に描くので, ここではmultiplotを使います.全体の図の サイズを1としたときに,図中の図の縦横を0.5にしたものを作ります. multiplotに入った後,まず全体の図を描きます. gnuplot> set xrange [ 0 : 20 ] gnuplot> set yrange [ 0 : 6 ] gnuplot> set xtics 5 gnuplot> set ytics 1 gnuplot> set multiplot multiplot> set origin 0.0,0.0 multiplot> set size 1.0,1.0 multiplot> plot "file.dat" u 1:2:3 notitle wi
3次元カラー表示の色を変えたい. [ver.4] ONLY ! 特に設定しなければ,pm3dは「黒→青→赤→黄」と変化するような配色を用 いて高さを表します.pm3dの配色を変えるには, set paletteコマン ドを用います.それに続くオプションにより,幾つかの色の変え方があります. Z値の最小値が-3,最大値が1となる関数 f(x,y) = (2*sin(x)-1)*exp(-y) を考 え,最小値のときに青,最大値で赤,z=0の高さで白となるように,色を変えて みます. gnuplot> set ticslevel 0 gnuplot> set pm3d gnuplot> set palette defined (-3 "blue", 0 "white", 1 "red") gnuplot> splot (2*sin(x)-1)*exp(-y) with pm3d オプション
時系列型データを用意する. データが日にちや時間となっている時系列データをプロットするには,まず set xdata time や set ydata time を使ってデータ が日付型であることgnuplotに教え,さらに set timefmt で日 付/時間の表示がどのようになっているかを与える必要があります.始めに データとしては以下のようなものを考えます. 2004-02-09 310 2004-02-10 185 2004-02-11 239 2004-02-12 132 2004-02-13 85 2004-02-14 57 2004-02-15 8 この日付のデータをgnuplotに読み込ませるには,timefmtとして "%Y-%m-%d" を与えます.この例では月と日にちが10未満の時に頭にゼロを パディングして桁数をそろえていますが,これをしなくとも(例えば 20
多くの線種を使う図 一つの図の中に沢山の線をひき,それらを区別したい場合があります.し かしながら,gnuplotで表示できる線の種類はterminal毎に違うため,一度に 何種類の線がひけるかはterm次第です.線種を区別するには,以下のような 属性を組合せることで可能です. 種類 (実線・点線・一点鎖線等) 太さ (細線・太線) 色 線と記号の同時表示 terminalによっては点線が描けなかったり,太さが変えられなかったりし ますので,組合せの数はあまり多くないかもしれません. 以下にpostscript を用いて線種の数をかせぐ方法の一例を示します. 表示する線の種類を指定するために, set linestyle で予めい くつかの線種を定義しておきます.gnuplot ver.4の場合は set style line とします.ここでは実線(postscript termin
幾つかのグラフを一つにまとめて描きたい. 複数のグラフを描くには,gnuplotのmultiplotを使う方法と,個別の図を EPSで作っておいて,TeX等を使って後でまとめ る方法があります.ここではmultiplotの使い方を説明します. set multiplot とすると,マルチプロットのモードに入り,プ ロンプトが multiplot> に変わります.このモードでは,plotコ マンドで表示するたびに,新しい図が古い図に重なって表示されるように なります.y=x, y=x*x, y=x*x*x の3つのグラフを順次重ね描きしてみましょ う. gnuplot> set multiplot multiplot> plot x multiplot> plot x*x multiplot> plot x*x*x multiplot> set nomultiplot XやYの範囲を指定しな
3項演算子 (A ? B : C) の使い方. 3項演算子は,C言語のそれと同様に働きます,と言うとあまりに不親切な ので,もう少し詳しく説明しましょう.3項演算子とは A ? B : C のように書 かれたもので,Aは条件式,BとCは実行文です.これは,Aが真ならBを実行し, そうでなければCを実行せよ,という意味を表します.X>0の範囲ではexp(-x), Xが負の領域ではexp(4*x)となる関数をプロットしてみましょう. gnuplot> set xrange [-5:5] gnuplot> plot x>0 ? exp(-x) : exp(4*x) 条件式を入れ子にすれば,もう少し複雑な関数を定義することも可能です. Xの絶対値の範囲に応じてY値が離散的に変化する関数を作ってみましょう. gnuplot> f(x)= (abs(x)<1) ? 100 : ( (abs(x)<2
図の大きさがいつも一定になるようにしたい. gnuplotが描くグラフの領域は,軸の数字やラベルによって変化します. この領域を固定したいときは,marginを調整します.marginには, 上(tmargin)下(bmargin)左(lmargin)右(rmargin)があり,デフォルトでは 全てが自動計算されるようになっています.現在の設定は, gnuplot> show margin lmargin is computed automatically bmargin is computed automatically rmargin is computed automatically tmargin is computed automatically で見ることができます.marginに与える数値は,文字数です. 例として全てのmarginを指定した場合を示します. gnuplot>
作業のバッチ化 ここでは,数値計算編の最後に保存したプロットファイル "output.plt" を使って,「その後」の仕事を楽に する方法を概説します.このファイルを覗いてみると,作業中に設定した部分 (軸の範囲やプロットするファイル名)と,その他のデフォルトで設定されてい る部分が混在しているのが分かると思います.ちょっと見づらいので,デフォ ルトで設定されている部分を消して,自分で設定したものだけを残してみましょ う.但し,termianlとplotの部分は長くなりすぎるので,継続行記号(backslash)を 使って折り返しています. #!/usr/local/bin/gnuplot -persist # set terminal postscript landscape noenhanced monochrome \ # dashed defaultplex "Helvetica
ラベルに上付き・下付き添字を使いたい. enhanced postscriptのterminalを使うと,軸の名前や図中のラベルの 文字列に添字を使うことができます.このterminalに設定するには, gnuplot> set terminal postscript enhanced の様に,enhaned のオプションが必要です.TeXの添字の書き方のように,X^2 とすると2が上付き添字になり,Y_3 とすると3が下付き添字になります.幾つ かの文字をまとめて添字にするには,Z_{64}の様に { } で括ります.上下の添字 を同時に付けたい時は,Z@^2_{64} の様に@記号を使います. 例として,y=sin**2(x),y=sin**3(x),y=sqrt(sin(x)) の3つを描いて,その 凡例に添字を使ってみます. gnuplot> set terminal post
粉体やエアロゾルなど粒子を扱う分野では, 累積体積割合 vs 粒径のプロッ トをよく描きます. 粒子径の対数をとったものの分布はある値を中心に正 規分布するケースが多く, 「正規確率軸」と呼ばれる軸がしばしば使われ ます.gnuplotには正規分布norm()とその逆関数invnorm()があります ので,これらを用いて正規確率軸を描くことができます.同様の方法を用いて 種々の関数でスケールされた図を描く事ができるでしょう. gnuplot> set ytics ("0.1" invnorm(0.001),"1" invnorm(0.01),"5" invnorm(0.05),\ > "10" invnorm(0.1),"20" invnorm(0.2),"30" invnorm(0.3),\ > "40" invnorm(0.4),"50" invnorm(0.5),"60" invno
X=0, Y=0のゼロ軸を描きたい. set {x|y}zeroaxis を使います.オプションを付けなければ, 線種0(点線)で描かれます.ls line_stle, lt line_type, lw line_width のオプションでゼロ軸の線種を変えることができます. 以下の例では lt -1 を使い, 枠線と同じ線を描いてみました. gnuplot> set xzeroaxis lt -1 gnuplot> set yzeroaxis 誤差棒の先に付く横線を消したい. 誤差付きのプロットをすると,誤差棒の先に小さな線が入ります. これを嫌う人も居ますし,データ点数が増えて来ると邪魔になったり します.これを消すには,次のようにします. gnuplot> set bar 0 barの後の数字で線の長さを指定します.0にすれば線は表示されません. なお, set pointsize
作ったグラフをTeXの文書に貼り込みたい. gnuplotのドライバにはlatexというのがあり,これを使えばグラフを PicTeXにして出力してくれます.しかし,この方法は描く図によっては表示す る点の数が非常に多くなる場合があり,TeXの処理がメモリ不足で出来なくな ることがあります.従って,TeXに図を取り込む場合は,図をEPSで出力してお いて,LaTeXのgraphicsパッケージで読み込む方が簡単です. まず,gnuplotで図をプロットし,出力ドライバをenhanced EPSにして, EPSのファイルを作っておきます. gnuplot> set term postscript eps enhanced gnuplot> set output "test.eps" gnuplot> set key left top gnuplot> set size 0.5,0.5 gnup
Color PostScriptで出力したグラフの色を変えたい. 出力をカラーのPostScriptにするとき,線や記号の色をgnuplotから直接 与える方法は無いようです.別の色を使う簡単な方法は,gnuplotから直接 Color PostScriptを生成するのではなく,一旦tgifのファイルに出力し,それ をtgifで編集する方法です. もう少し反則技に近い方法として,出来上がったPostScriptを直接編集す る手があります.gnuplotが生成するPostScriptファイルは,案外読みやすい ように出来ています.まず,何番の線が何色に対応するのかを調べるために, カラーのインデックスを作ってみましょう.testコマンドで調べるのが簡単で すが,ちょっと手間をかけて次のようにしてみました. gnuplot> set term postscript enhanced colo
学術論文の投稿にgnuplotを利用する例 ここでは,学術論文を投稿するときに添付する図をgnuplotとTeXで作る方 法を紹介します.論文投稿の際の図のフォーマットは学会誌の規程毎に違いま すので,あくまで一例です. 論文の図を送付する一般的な方法は,図を別紙にまとめておきcaptionだ けの紙を添付する,captionを図中に入れる,の2通りが考えられます. captionの入れ方によってちょっと方法が異なりますが,やりかたそのものは 同じです.これをLaTeX2eで作ります. 図を作る際の注意 TeXでまとめる 横向きの図を作る ページ毎のPostscriptを作る 完成品 図を作る際の注意 最初に図だけをgnuplotを使ってEPSで作っておきます.その際,以下の点 に注意します. グラフの出力は, set term postscript eps enhanced
Z軸のゼロ点がXY平面から離れてしまう. splotでは,Z軸の原点は,XY平面から少し離れた所にきます.こ れをXY平面上に持ってきたいときには, set ticslevel を使い ます.ticslevelの値を0にすると,Z軸の原点がXY平面と一致します. gnuplot> set ticslevel 0 gnuplot> splot (x**2)*(y**2) もっとメッシュを細かくしたい. 関数を3次元プロットするときの,メッシュ(XY座標)の間隔は isosample で決まります.この数値が小さい程メッシュは荒くなり,大き くするとメッシュは細かくなります.標準値は10です. メッシュが荒すぎると隠線処理 set hidden3d の時に問題になりま す.下の例は,標準値10で関数 z=sin(x)*cos(y)をプロットしたものです.上 側が隠線処理をしない場合,下は隠線処
一つのファイルに入った複数のデータをプロットするには? 一つのファイルに複数のデータを書いてそれらを同時にプロットするには, usingとindexを使います. X座標が同じでY座標が異なるデータをプロットするときは,データを表形 式で表して,usingでプロットするデータを指定するのが簡単です. # X Y1 Y2 Y3 -1.0000 0.0000 0.0000 1.0000 -0.9000 0.5700 1.1769 0.7150 -0.8000 1.0800 1.4400 0.4600 -0.7000 1.5300 1.4997 0.2350 -0.6000 1.9200 1.4400 0.0400 -0.5000 2.2500 1.2990 -0.1250 -0.4000 2.5200 1.0998 -0.2600 -0.3000 2.7300 0.8585 -0.3650 -0
gnuplot 入門 --- プロットスタイル gnuplotで描くことができるグラフの種類を,ここでまとめておきます. 描画のスタイルは,plotコマンドのwith style で指定します. with linesなら線,with pointsなら記号でプロットしま す.大ざっぱに言えば,次のようなことができます. データ点に,点や記号,線を描く 棒グラフを描く 誤差付きのデータ点を描く ベクトルを描く その他 (candlesticks, financebars) これらは簡単に組み合わせて利用できます.例えば棒グラフと折れ線グラフ を重ねてプロットするには,次のようにします.(同じファイル名が2度出て来る ときは,名前を""で省略できます.) gnuplot> plot "file.dat" with boxes, "" notitle with lines
非線形関数を使った最小自乗フィッティングの方法(その1). gnuplot3.7の強力な機能の一つに,関数のフィッティング(当てはめ)があり ます.パラメータを含んだ関数を用意すると,データファイルの数値に対 して最適なパラメータの数値を自動的に探索します.関数はgnuplotで表現 できるものなら,線形・非線形を問いません.ここでは, f(x)=a/(1+b*x*x) というLorentz型の関数を使った例を示します.この関 数のパラメータは,aとbの2 つです. サンプルのデータとして,a=2, b=1 の値をこの関数に与えて 計算したものを用意しました.この数値に関数をフィットしたときに, a=2, b=1という結果が得られるかどうかを見ようとしてい ます. -10.000000 0.019802 -8.947370 0.024674 -7.894740 0.031582 -6.84
gnuplot 入門 --- 数値計算編 まずはデータファイルの準備 計算結果をプロットするためには,結果をファイルに落しておく必要が あります.ファイルは通常のテキストファイルにしておきます.次のような プログラムを作り,その結果をプロットしてみましょう.これは,y=exp(-x)の Pade近似を計算するものです. #include <stdio.h> #include <math.h> int main(void); int main(void) { int i; double x,y,z1,z2,d; d = 0.1; x = 0.0; for(i=0;i<50;i++){ x += d; y = exp(-x); z1 = (6 - 2*x)/(6 + 4*x + x*x); z2 = (6 - 4*x + x*x)/(6 + 2*x); printf("% 6.2f % 1
何かの計算や実験を行い,その結果をグラフにするのが, 理系の研究者にとって最も多いgnuplotの使われ方ではないでしょうか. 結果のデータをプロットして全体を眺め,結果が良さそうだったらポストスクリプト にして印刷したり,EPSにしてTeXで書かれた論文に貼り込んだり.... プロットできるデータのフォーマットは? 2次元のデータ 3次元のデータ マトリックス 2次元のデータ わざわざ書くまでも無い話しですが,一応ここにまとめておくこと にします.数値データは,空白(スペースもしくはタブ)で区切られた カラムにします.行の先頭に#があると,その行は無視されます. 実はgnuplotは,データがどのように書かれていても,読み込みの書式 を指定することでデータを読めるのですが,ここではこの方法は 取り上げません. # X Y 1.0 1.2 2.0 1.8 3.0 1.6 例えば2
gnuplot 入門 --- 実験データ編 まずはデータファイルの準備 ファイルに書かれた実験データをプロットし,そこに解析解を重ねて表示 してみましょう.実験データは3つのセットがあり,ひとつのファイルに続け て書かれています.各データのブロックの間には2行の空行をいれてあります. データ点は,X座標(エネルギー),Y座標(測定値),Yの誤差の3つの組で与えら れています.誤差は絶対値で与えます(つまり測定値と同じ単位を持っている ということ).#で始まる行は無視されます. # Data No. 1 2.1500E-02 1.3060E+00 5.3098E-02 2.3900E-02 1.2220E+00 4.7043E-02 2.6800E-02 1.3430E+00 4.9854E-02 2.9700E-02 1.2580E+00 4.5860E-02 3.2500E-02 1
{linear | cubicspline | bspline} {points n } {order n } {levels { n | auto { n } | discrete z1 {, z2 ,... } | incremental start,incr,end }
gnuplot入門 gnuplotは,関数のプロットや数値データのプロットなどを行う,非常に すぐれたフリーソフトです.関数のプロットの方法はあちこちで説明されてい るので,ここではより実践的な,数値データ(つまり実験データや計算結果)の プロット方法に重点を置いて説明します. 基本の基本編 --- 起動から終了まで 終了,読み込み,保存 プロット パラメータの変更 shell 関数,変数,計算 数値計算編 --- 計算結果のプロット データファイルの準備 (X,Y)の組をプロット 同時に複数の線を引く グラフのタイトルと軸名を入れる XYの範囲を変更する 軸に目盛をいれる 完成 実験データ編 --- 実験データのプロット データファイルの準備 データの組をプロット 凡例をつける 計算値を重ねる 線種を変える 軸名を入れる 表示範囲を調節する 目盛を
3次元図をカラー表示で描きたい. [ver.4] ONLY ! gnuplotの3次元表示は線あるいは点で描かれますが,ver.3.8や4.0からは pm3d をセットすることでカラーマップを用いた3次元表示が可能 になっています.画面へのカラー出力の他,PostScriptやpng/jpegなどのフォー マットでファイルに書き出す事ができます. gnuplot> set xrange [-2:2] gnuplot> set yrange [-2:2] gnuplot> set pm3d gnuplot> splot exp(-x*x)*exp(-y*y) PostScriptに出力する場合は,terminalのオプションcolor/monochrome によりカラーかグレースケールを選べます.グレースケールの図は set palette gray を用いても可能ですが,この場合は図中
目盛あれこれ 目盛の表示を変えるには? 軸に描かれる目盛には,大きな目盛(major tics)と小さな目盛(minor tics)が あります.軸の数字は大きな目盛のある所に書かれます.デフォルトでは,小さな 目盛は対数プロットのときだけ描かれます. 大きな目盛の表示を変えるには, set {x|y}tics を使います. gnuplot> set xtics 2 gnuplot> set ytics 0,200 gnuplot> plot x**3 X軸の目盛は増分だけを指定した場合で,目盛の数値は2づつ増加します. Y軸では目盛の初期値と増分を指定した場合で,0から200づつ増加します.Yが 0未満の部分には目盛が表示されません.set ytics 0,200,600 の様に終了値(600)を指示することもできます. 小さな目盛は, set m{x|y}tics を使い,大きな目
次のページ
このページを最初にブックマークしてみませんか?
『t16web.lanl.gov』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く