gnuplot, mathematica によるデータファイルからの安易なグラフの描き方

Time-stamp: "2004/01/19 Mon 23:15 hig"

gnuplot や mathematica を用いて, CSV形式や, スペース区切りのテキストファイル形式の数値データから, 種々のグラフを描く方法を説明しています. png 形式で保存して Word から 読み込めるようにする方法, アニメーション gif の作り方についても述べています.

目次


ファイル形式

次のような形式でデータをファイルに保存しているとしましょう. データの区切りは空白です.
y.dat gnuplot の典型例
1行に1個の数値. n 行目に f(n) が書いてある.
xy.dat gnuplot の典型例
行ごとに, x f(x) が書いてある.
xy1y2.dat gnuplot の典型例
行ごとに, x f(x) g(x) h(x) ... が書いてある.
txyz.dat gnuplot の典型例
行ごとに t x(t) y(t) z(t) が書いてある. フォーマットとしては上と同じだけど, 時刻に依存して3次元空間を移動する粒子というイメージ.
txy.dat gnuplot の典型例
行ごとに t x(t) y(t)が書いてある. 上のものの2次元バージョン.
z.dat gnuplot の典型例
2変数関数 f(n,m). n行めのm列目に, f(n,m) が書いてある.
xyz.dat gnuplot の典型例
2変数関数 f(x,y). 3次元座標 (x,y,z) が, 厳しい規則
x0 y0 f(x0,y0)
x0 y1 f(x0,y1)
x0 y2 f(x0,y2)
x0 y3 f(x0,y3)
空行(x1が変化するところは空行で区切る)
x1 y0 f(x1,y0)
x1 y1 f(x1,y1)
こののりでくり返す
....
x2 y3 f(x2,y3)
にしたがって書いてある.

gnuplotの典型的プロット方法

Windows 用 gnuplot山賀さんのページ で配布されています.

gnuplot は, # から始まる行は無視してくれます.

shell% /usr/bin/gnuplot
	G N U P L O T
	Linux version 3.7
	patchlevel 1 (+1.1.9 1999/11/08)
	last modified Fri Oct 22 18:00:00 BST 1999

	Copyright(C) 1986 - 1993, 1998, 1999
	Thomas Williams, Colin Kelley and many others

	Type `help` to access the on-line reference manual
	The gnuplot FAQ is available from
	

	Send comments and requests for help to 
	Send bugs, suggestions and mods to 


Terminal type set to 'x11'
gnuplot> plot "y.dat"
# n(行目) を x 座標, 数字を y 座標として, (x,y) を plot. 


gnuplot> plot "xy.dat" u 1:2
# 1列目を x 座標, 2列目を y 座標として, (x,y) を plot.


gnuplot> plot "xy1y2.dat" u 1:4  
#  1列目を x 座標, 4列目を y 座標として (x,y) を plot.


gnuplot> plot "xy1y2.dat" u 2:3
#  2列目を x 座標, 3列目を y 座標として (x,y) を plot.


gnuplot> splot "txyz.dat" u 2:3:4 with line
#  2列目を x 座標, 3列目を y 座標, 4列目を z 座標として (x,y,z) の列を plot.


gnuplot> plot "txy.dat" u 2:3 with linespoints
#  2列目を x 座標, 3列目を y 座標として (x,y) の列を plot.


gnuplot> splot "z.dat" matrix
# 3次元プロット


gnuplot> splot "xyz.dat" with line
# (1列目, 2列目, 3列目) を (x,y,z) と思って3次元プロット


gnuplot> plot "y.dat" , "xy.dat" u 1:2, sin(2x)
# 重ねて plot

gnuplot> plot [-10:10] [-5:5] "some.dat"
# -10< 横軸 < 10, -5 < 縦軸 < 5 の範囲で plot.

gnuplot> plot "some.dat"  every 20 
# 20行ごと(空行含まず)にデータを読み取ってグラフを描く.

gnuplot> plot "some.dat"  every :::2::2
# 改行のみの行をブロックの区切りと見なしたとき, 
# 2番目のブロックだけについてグラフを描く.

gnuplot における安易な印刷

shell% lasergnu 'plot "z.dat"'

文書に読み込むための安易なファイル出力

LaTeX

(Encapsulated) PostScript にする.
gnuplot>set term postscript 場合によっては postscript eps
gnuplot>set output "graph.eps"
gnuplot>plot ...

MS Word/PowerPoint etc.

png または pbm 形式で保存し, 必要ならさらに xv で望みの形式に変換し, Word 文書などに貼る.
gnuplot>set term png medium color
gnuplot>set output "graph.png"
gnuplot>plot ...
1行目が形式の指定. png のかわりに pbm, medium のかわりに small や large, color のかわりに monochrome や gray も指定できる. 2行目が書出し先のファイル名の指定.

Linux (X) の任意の window の内容を画像ファイルにする方法

xv で, grab ボタンを押して, 好きな window をクリックすればいいのです.

Gnuplot や OpenGL の出力などにも使えます (osMesaや writetiff などを使う方が趣味がいいけど).

また, xwdも使えます.
penguin15 % xwd  > file.xwd この状態でキャプチャーしたい window を左クリックする. すると, プロンプトが返ってくる
penguin15 % xv  file.xwd これで, png, jpeg など望みのファイル形式に変換

安易なanimation の仕方

計算科学のページ参照.

安易なanimation gif の作り方

上の xyz.dat のデータファイルの中身が

t x f(x,t)
という意味だった場合を考えましょう. t が変化するときに, 下のような looper.gp で animation できます.

# looper.gp
plot [-2:2][-2:2] "xyz.dat" every ::i::i using 2:3
i=i+10
pause 1
if(i < 1000) reread
i=0
# end of looper.gp
そうしたら, まず, 次のようなファイルを, a.sh として保存します.
# a.sh
declare -i i
declare -i j

# not change number of digits
i=0
j=10000

while  [ $i -lt 1000 ]  ;
do 
echo set term pbm medium color\; set size 0.6,0.6 \; set output \"fig$j.pbm\"   \;  plot [-2:2][-2:2] \"xyz.dat\" every ::$i::$i using 2:3 | gnuplot
ppmtogif fig$j.pbm > fig$j.gif;
# もし gif を terminal として support している gnuplot なら,
# echo set term gif ; .. ; plot ...
# とすれば, ppmtogif は省ける.
j=$(($j+1));
i=$(($i+10));
done

gifsicle --loop --delay 40 --optimize=2 fig*.gif
rm fig*.pbm 
rm fig*.gif
# end of a.sh

端末から,

shell% bash a.sh > anim.gif
として実行すると, アニメーション gif ファイル anim.gif ができるはずです.
shell% gifview --animate anim.gif
で確認できます. web browser でも見られるはずです.

なお, 同一のディレクトリに他の gif ファイルや pbm ファイルがないことを仮定しているので, 新しいディレクトリをつくってその中で作業したほうがいいかもしれません.

looper.gp のような, gnuplot の中だけで閉じて(call, load などで) 実行できないのは, set output "filename.gif" のfilename に変数を含められない(?)からです.

安易なdemo

次で demo が実行できます.
shell% cd ~hig/src/gnuplot-3.7.1/demo ; /usr/bin/gnuplot all.dem
次で help がみられます.
gnuplot> help

Mathematica によるデータファイルからの安易なグラフの描き方

上のデータファイルのフォーマットについて, この Notebook で読み込んでグラフ作成をしています. 独立な説明として, 計算科学のページもあります.

Links


Copyright © 2001-2003 Saburo Higuchi. All rights reserved.
樋口三郎, http://www.math.ryukoku.ac.jp/~hig/ hig mail address