Yamamoto's Laboratory
 
 
gnuplot
  EPS
 
 

gnuplotEPS

異論もあるでしょうが,gnuplotの出力はEPS(Encapsulated PostScript)が最も美しいです.そのEPS出力に関するメモです.

目次


Bounding Box の修正

問題点

gnuplotは,BoundingBox が不適切なEPSをはき出すことがあります.下の図のようにXおよびY軸のラベルの文字を大きくすると,その一部がBoundingBox(図中の赤線)からはみ出ます.これをそのまま,LaTeXに貼り付けると,ラベルの一部が切り取られます.

gnuplotのeps
問題のBounding Box(bad_bbox.gp).

解決方法

ここでは,GSviewepstoolを使った修正方法を示します.GSviewはGUIで作業ができます.epstoolはCUIですが,Drag and Dropに対応したバッチファイルにすることもできます.さらに,gnuplotから呼び出して自動で修正させることも可能です.お勧めは,ここの最後で示す「gnuplotにコマンドを埋め込む(Windows, Linux)」方法です.

GSviewを使う(Windows)

GSviewを使うとGUI で BoundingBox の修正ができます.おそらく,これが最も手軽な方法です. 修正するファイルが多くなると,面倒になります.

修正するEPSファイルを開き,メインメニューの「File」から,「PS to EPS」を選択します.すると,ダイアログ「PS to EPS」が現れますので,「Automatically calculate Bounding Box」をチェックし,ボタン[Yes]をクリックします.最後に,保存用のダイアログが現れますので,適当な名前をつけて保存を行います.

以上で,BoundingBoxの修正ができます.

epstoolをつかう(Windows)

インストール

まずは,インストールです.インターネットの適当なところ,たとえばここから「epstool-3.08-win32.zip」をダウンロードします.ファイルはzipで固めて圧縮されていますので,適当なソフトウェーで解凍します.すると,フォルダー「epstool-3.08」ができあがりますので,それを「C:\Program Files」あるいは「C:\Program Files (X86)」(64ビットOSの場合)にフォルダーごと入れます.すると,実行ファイルは「epstool-3.08\bin」にありますので,パスを通します.

コマンドプロンプトで「epstool --vesion」とタイプすると,「epstool 3.08 2005-06-06」と表示されれば,インストールとはOKです.

使用方法は,解凍してできたフォルダーの中のマニュアル「epstool-3.08\doc\epstool.htm」に書かれています.

コマンド

コマンドプロンプトからコマンド操作により,BoundingBoxの修正は以下のようにします.BoundinBoxが間違っているファイル(bad_bbox.eps)が修正され,新規にファイル(fix_bbox.eps)ができあがります.

> epstool --copy --bbox bad_bbox.eps fix_bbox.eps

この方法の面倒なところは,コマンドが長いことと,BoundingBoxが間違っている元のファイルが残ることです.次に示すバッチファイルは,それを解決しています.

バッチファイル

いちいちコマンドを入力するのが面倒な人向には,drag and dropに対応したバッチファイルが良いでしょう.

dorag and dropに対応したバッチファイル(fixbbox.bat).

001   @echo off
002   for %%a in (%*) do (
003   cd "%%~pa"
004   epstool --copy --bbox "%%~nxa" temporary_epsfile.eps
005   del "%%~na.eps"
006   move temporary_epsfile.eps  "%%~nxa"
007   )

このファイル(fixbbox.bat)をパスの通っているところ,たとえば「epstool-3.08\bin\」に保管します.そして,デスクトップにショートカットを作成します.drag and drop でEPSファイルの修正ができます(超お手軽).一度に,複数のファイルの処理も可能です.

さらに,コマンドプロンプトで一度に複数のファイルの処理もできます.

> fixbbox one.eps two.eps three.eps

このバッチファイルは,ワイルドカードも使えます.次のようにすると,一度にフォルダー内の全てのEPSのBoudingBoxの修正ができます.

> fixbbox *.eps

このバッチファイルだと,BoundingBoxに間違いがある元ファイルが残りません.修正されたファイルは元ファイルと同じ名前です.ファイルの名前の書き換えや削除の手間が省け,便利だと思います.

epstoolをつかう(Linux)

インストール

私の場合は,LaTeX関係のパッケージをインストールしたときのインストールされたようです.読者の Linux にされていなければ,適当にインストールしてください.

コマンドプロンプトで「epstool --vesion」とタイプすると,「epstool 3.08 2005-06-06」と表示されれば,インストールとはOKです.

使用方法は,解凍してできたフォルダーの中のマニュアル「/usr/share/doc/epstool/html/epstool.htm」に書かれています.

コマンド

LinuxのでもWindowsでも同じコマンドです.BoundinBoxが間違っているファイル(bad_bbox.eps)が修正され,新規にファイル(fix_bbox.eps)ができあがります.

$ epstool --copy --bbox bad_bbox.eps fix_bbox.eps
シェルスクリプト

drag and drapには対応していませんが,Windowsで作成したバッチファイルと同じようなスクリプトファイルを作ります.以下の bashスクリプトで同じようなことができます.

epstoolを便利に使うためのシェルスクリプト(fixbbox).

001   #!/bin/bash
002   echo
003   echo "fix BoundingBox by epstool"
004   echo
005   
006   for eps in "$@"
007    do
008     echo $eps
009     epstool --copy --bbox $eps temporary_epsfile.eps
010     rm $eps
011     mv temporary_epsfile.eps $eps
012   done

これをパスの通っているディレクトリーに保存し,実行権限「chmod +x fixbbox」を与えます.

使い方は,次の通りです(Windowsのバッチファイルと同じ).引数は,修正すべきEPSファイルのみです.

$ fixbbox plot.eps                    ひとつのファイルを修正
$ fixbbox one.eps two.eps three.eps   複数のファイルを修正
$ fixbbox *.eps              ワイルドカードを使用

経験のある読者は,スクリプトファイルの名前を「fixbbox.sh」にしなかったことを不審に思うでしょう.拡張子を付けなかった理由は,次節「gnuplotにコマンドを埋め込む(Windows, Linux)」で示すgnuplotスクリプトをWindowsとLinuxで互換性を持たせるためです.ようするに「fixbbox」でこのバッチ/スクリプトを呼び出すためです.拡張子「.sh」を付けちゃうと,gnuplotスクリプトが Windowsで動かなくなるんだよなー.

gnuplotにコマンドを埋め込む(Windows, Linux)

これまでの方法は,gnuplotが作成したEPSファイルをいちいち修正するので面倒です.gnuplotに用意されているコマンド「system」を上手に使うと,この問題が解決できます.gnuplotスクリプト内に先ほど作成した fixbbox を呼び出す systemコマンドを記述します.具体的には,以下のようにします.

BoundingBoxを修正したEPSファイルを吐き出すスクリプト(correct_bbox.gp).

001   #----------------------------------------------------------
002   # correct Bounding Box sample
003   #                            2013.02.02  Masashi Yamamoto
004   #----------------------------------------------------------
005   #---- etc -------
006   set samples 1024
007   set size 1.0
008   set macro
009   #set grid xtics ytics mxtics mytics lc rgbcolor "black" lt 1, lt 0
010   set key off
011   #
012   #---- x axis -------
013   set xrange [0:100]
014   set xtics border mirror in scale 3,1.5 font "Arial,28" 0, 10 
015   set mxtics 5
016   set format x  "%.0f"
017   set xlabel "Time [sec]" offset 0,-1 font "Arial,36"
018   #
019   #---- y axis -------
020   set yrange [-1:1]
021   set ytics border mirror in scale 3,1.5 font "Arial,28" -1, 0.2
022   set mytics 4
023   set format y "%.1f"
024   set ylabel "Amplitude [V]" offset -3,0 font "Arial,36" 
025   #
026   #---- for plot -----------
027   plot 0.45*sin(x)+0.45*sin(1.1*x) with lines lc rgbcolor "red" notitle
028   pause -1 "push [Enter] key to quit!!"
029   #
030   #--------- for file -------------
031   eps_file = "correct_bbox.eps";
032   set terminal postscript eps enhanced solid color lw 1.5 font "Arial:24"
033   set output eps_file
034   replot
035   unset output
036   #-------- fix BoundingBox -----------
037   command = sprintf("fixbbox %s", eps_file)
038   system command

もともと,BoundingBox が間違っている EPS ファイルを出力した「bad_bbox.gp」との違いは,035 – 038行です.035行で postscript ターミナルをクローズ,036行はコメント文,037行で実行すべきコマンドを作成,038行でそのコマンドを実行しています.

コマンドプロンプト/ターミナルで,「gnuplot correct_bbox.gp」とすると,以下に示すEPSファイルが作成されます.赤の波線 (実際は表示されない) が BoundingBox を示しています.全てのオブジェクトは,その範囲内にあることが分かります.

正しい EPS
正しいのBounding Box(correct_bbox.gp).

ビットマップ(*.bmp)への変換

本を書いているとき,その図はビットマップフォーマットで提出を求められることがある.ビットマップへの変換テクニックを忘れないように書いておきます.

ここで示すバッチファイルとシェルスクリプトは,eps以外でもbmp変換してしまいますので注意してください.それを防ぐことも簡単ですが・・・.気になるようでしたら,読者でなおしてください.

convertを使った変換(Windows, Linux)

図の操作は,ImageMagickを使っています.このソフトウェアーはさまざまなプラットフォームに対応しており,Windows や Linux で同じように使えて,便利です.

ImageMagickの中に「convert」とというコマンドがあります.これを使うと,画像のいろいろな変換ができます.ここでは,EPSからBMPに簡単に使います.このコマンドにはかなり多くのオプションがあり,いろいろな設定ができます.使い方を含めて,そのオプションについては「ImageMagick Convert Command-line Tool」に詳しく書かれています.

コマンド編

convert -density 600 -units PixelsPerInch plot.eps plot.bmp

バッチファイル編(Windows)

長いコマンドをいちいち打つのは嫌だし,本を書いているといつでも同じ条件で変換したいので,バッチファイルする.先ほどと同じ要領で,次のようにします.

dorag and dropに対応したバッチファイル(eps2bmp.bat).

001   @echo off
002   for %%a in (%*) do (
003   cd "%%~pa"
004   convert -density 600 -units PixelsPerInch  "%%~nxa" "%%~na.bmp"
005   )

このファイル (eps2bmp.bat) をパスの通っているフォルダーに保管します.そして,デスクトップにショートカットを作成します.drag and drop でビットマッファイルを作ることができます.以下のように,コマンドを用いて処理もできます.

> eps2bmp plot.eps                    ひとつのファイルをbmpへ
> eps2bmp one.eps two.eps three.eps   複数のファイルをbmpへ
> eps2bmp *.eps              ワイルドカードを使用

シェルスクリプト編(Linux)

Windowsのバッチファイルと同じことを,Linuxでするには以下のような bashスクリプトで可能です.ただし,drag and dropには対応していません.

epsをbmpに変換するシェルスクリプト(eps2bmp).

001   #!/bin/bash
002   echo
003   echo "convert form eps to bmp"
004   echo
005   
006   for eps in "$@"
007    do
008     echo $eps
009     convert -density 600 -units PixelsPerInch $eps ${eps%.eps}.bmp
010   done

使い方は,Windowsのコマンド(eps2bmp)と同じです.

参考文献・WEBサイトなど



no counter