gnuplotで画像を出力したいことがあります。
その方法を書きたいと思います。
想定する環境
- gnuplot: Version 4.6 patchlevel 4
- Imagemagick(convertコマンドを使用)
がインストールされている状況を考えます。特に、gnuplotではdofor構文を用いるため少なくともVersion4.6以上出ないと本稿に沿った画像出力はできませんのでご了承ください。
画像出力について
画像出力するための方法として、epsファイルを出力してからjpgやpng形式に変換します(僕がそれしか知らないためです)。
基本的には
ターミナル(x11とかwxtとかaquaとかpostscriptとかgifとか…)の指定→出力ファイル名の指定→グラフをファイルに出力
という流れになります。
手入力で画像出力する場合はgnuplotで
set terminal postscript eps enhanced color
set output "aaa.eps"
replot
set output "aaa.eps"
replot
とすれば今出力されているグラフの画像が”aaa.eps”というファイル名で得られます。
もしもjpgやpng形式に変換したければImagemagickのconvertコマンドを用いて、
convert -density 300x300 aaa.eps aaa.jpg
とすればjpg形式が得られます。jpgをpngに書き換えればpngが得られます。
しかし、何枚も画像がほしい場合には不向きです。スクリプトを書きましょう。
“out.plt”というファイルを作り、その中にこう書きます。
fname="$0"
set terminal postscript eps solid enhanced color
set output fname.".eps"
replot
set out
set terminal wxt enhanced
# 1. PNG with background
cv=sprintf("convert -density 300x300 %s.eps %s.png",fname,fname)
# 2. PNG with background
#cv=sprintf("convert -density 150x150 %s.eps %s.png",fname,fname)
# 3. PNG with background white
#cv=sprintf("convert -density 150x150 -background white -flatten -alpha off %s.eps %s.png",fname,fname)
system cv
set terminal postscript eps solid enhanced color
set output fname.".eps"
replot
set out
set terminal wxt enhanced
# 1. PNG with background
cv=sprintf("convert -density 300x300 %s.eps %s.png",fname,fname)
# 2. PNG with background
#cv=sprintf("convert -density 150x150 %s.eps %s.png",fname,fname)
# 3. PNG with background white
#cv=sprintf("convert -density 150x150 -background white -flatten -alpha off %s.eps %s.png",fname,fname)
system cv
このファイルをgnuplotのcallコマンドを用いて、
call "out.plt" "bbb"
として呼び出します。callは引数を指定できるコマンドです。
すると”bbb.eps”と”bbb.png”ファイルが作成されます。便利だね!