gnuplot
EPS
|
gnuplotEPS異論もあるでしょうが,gnuplotの出力はEPS(Encapsulated PostScript)が最も美しいです.そのEPS出力に関するメモです. 目次Bounding Box の修正問題点gnuplotは,BoundingBox が不適切なEPSをはき出すことがあります.下の図のようにXおよびY軸のラベルの文字を大きくすると,その一部がBoundingBox(図中の赤線)からはみ出ます.これをそのまま,LaTeXに貼り付けると,ラベルの一部が切り取られます.
解決方法ここでは,GSviewとepstoolを使った修正方法を示します.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に対応したバッチファイルが良いでしょう. 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スクリプトで同じようなことができます. 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コマンドを記述します.具体的には,以下のようにします. 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 を示しています.全てのオブジェクトは,その範囲内にあることが分かります.
ビットマップ(*.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)長いコマンドをいちいち打つのは嫌だし,本を書いているといつでも同じ条件で変換したいので,バッチファイルする.先ほどと同じ要領で,次のようにします. 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には対応していません. 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サイトなど |