memo
Table of Contents
Gnuplot
球を描く
unset key; set border 0 unset xtics; unset ytics; unset ztics set parametric set urange [0:pi]; set vrange [0:2.0*pi] set isosample 5,9 set size 0.7,1.0 set view 80,193 f(u,v)=sin(u)*cos(v) g(u,v)=sin(u)*sin(v) h(u,v)=cos(u) set term pos eps enh 22 set out "bloch.eps" splot f(u,v),g(u,v),h(u,v) lc rgb "gray10" set out set term pop
色付き
splotより上に以下を加えると色が付く。
set pm3d unset colorbox ## [black and white] set palette defined (0 "gray10", 1 "white") ## [color] # set palette defined (0 "#4444ff", 1 "#44ff44") ## [no surface] # unset surface # set palette defined (0 "#4444ff", 1 "#ff4444") # set isosample 10,18
90x pulse
π/2 pulse くらいなら gnuplot だけで描ける。
set label "|0{/Symbol \361}" at 0.1, 0, 1.15 set label "|1{/Symbol \361}" at 0.1, 0, -1.15 splot f(u,v),g(u,v),h(u,v) lc rgb "gray10", f(0.5*u,0.5*pi), g(0.5*u,0.5*pi), h(0.5*u,0.5*pi) lw 8 lc rgb "blue"
アニメーションを作る
rereadを使って簡単にアニメーションを作ることができる。
例えば、100行くらいのデータファイル(data.txt)
$ ruby -e 'include Math; puts (0..100).map{|x| "#{x} #{sin(0.1*x)}"}' > data.txt
があるとき、
if (!exist("j")) j=0; set term png 24;\ unset key; set xtics 0,50,100; set ytics -1.2,1.2,1.2 set out sprintf("fig/fig%03d.png",j) plot [0:100][-1.2:1.2] "./data.txt" ev ::j::(j+10) t "" w l lw 8 lc rgb "#8888ff",\ "" ev ::(j+10)::(j+10) w p pt 7 ps 4 lc rgb "blue" if (j<90) j=j+1;reread
こんな感じのファイル(plot.gp)を用意して、gnuplotで実行した後ffmpegなどで処理すれば完成。
$ mkdir fig $ gnuplot plot.gp $ ffmpeg -i fig/fig%3d.png -vcodec libx264 -r 30 -g 150 -crf 20 -qmin 14 -qmax 41 -qdiff 4 -qcomp 0.4 -s 320x240 sin.mp4
凝ったことをするのなら "set out ...; plot ...
" を並べたgnuplotのスクリプトを
適当なスクリプトで作ったほうが早い。
ラベルなどに日本語を使う
フォントの指定で日本語フォントを選ぶと良いらしい。
set xlabel 'x軸のラベル' set term pos eps enh "Ryumin-Light-UniJIS-UTF8-H" 22
ファイルの文字コードはUTF-8で。
TeXのフォントを使う
使いたいフォントのpfb形式をfontfileで指定して、
{/フォント名 \xxx}
とする。
文字コードはgnuplotのdocsにあるps_fontfile_doc.texを参照。
set pm3d map set palette gray set size square set sample 100; set isosample 100 set xlabel 'パルス長エラーの大きさ {/CMMI10 \042}' set ylabel '回転角 {/CMMI10 \265}' set term pos eps enh "Ryumin-Light-UniJIS-UTF8-H" 22 fontfile "(cmmi10.pfbのある場所)/cmmi10.pfb" set out "output.eps" splot [-1:1][0:2*pi] abs(cos(0.5*x*y)) set out set term pop
その他
EPSの余白を取り除く
$ epstool --copy -b input.eps output.eps
gnuplotでEPSを作っていて、あらかじめ適切なBounding Boxがわかっているなら、 gnuplotスクリプトの最後に
! sed -i 's/^\(%%BoundingBox:\)\( [0-9]\+\)\{4\}$/\1 100 100 200 200/' foo.eps
などと書いてsedで処理したほうが楽かもしれない。
EPSをPNGに変換
$ gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=png16m -dEPSCrop -r72 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=foo.png foo.eps
あるいは
$ convert -density 72 foo.eps foo.png
背景を透過させるならデバイスをpngalphaにする。
$ gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pngalpha -dEPSCrop -r72 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=foo.png foo.eps
top | home |