28.6 グラフを画像として保存する

gnuplotでは,出力を画面に表示するだけでなくファイルに書き出すことができ,作成したグラフを他の文書に貼り付けたりすることができます.ここでは,その方法を説明します.
gnuplotの起動時のメッセージに

Terminal type set to 'aqua'

という行があったはずです.「aqua」というのは Mac OS 向けの画面表示インターフェイスです.この「Terminal type」を他のタイプに変えることで,画像ファイルに出力することができます.それを行うには,set term コマンドを使います.
set term (タイプ)return2

なお上で (タイプ) を指定しなければ,指定できる Terminal type の一覧が表示されます.
このページの残りでは,いくつかの形式の画像ファイルに出力する方法を説明していきます.LaTeX 文書に挿入する方法は hwb27.11 グラフィックス を参照してください.なお,標準設定だと,軸や凡例のフォントが図に対して小さいように感じられます.実際に使う際には size 指定などをうまく使い,調節して下さい.
画像ファイルへの出力が終わったら,
set term aquareturn2

を実行することで,再びgnuplot 起動時のようにグラフが画面上に表示されるようになります.
gnuplot を起動したまま,画像ファイルを別のソフトウェアで読み込んだりする前には,必ず set term aqua を行うか,別の(ダミーの)保存ファイル名を set output で指定するようにして下さい.そうしないと,画像ファイルの出力が不完全になることがあります.

PNG 形式:png, pngcairo

PNG 形式の画像ファイルを作成したいのならば,Terminal type に png を指定し,次に set output で出力したいファイルの名前を指定します.

set term png size 480,360return2
Could not find/open font when opening font "arial", using internal non-scalable font Options are 'nocrop medium size 480,360 '
set output "gnuplot-png.png"return2

ここで,size 480,360 は画像のサイズをピクセル単位で 480×360 にするという指定です.標準の画像サイズは 640×480 です.
その後,画面に出力するのと同じように
set xrange [-1:1]return2
plot x**2 title "x^2", sin(x), cos(x)return2

などとプロットを行うことで,内容が画面の代わりに set output で指定したファイル(この場合は gnuplot-png.png)に保存されることになります.下に,以上の入力から得られた gnuplot-png.png を載せておきます.
PNG 形式への出力

pngcairo

教育用計算機システムの gnuplot など,比較的最近のものでは Terminal type に pngcairo を指定することができます.png を使うよりかは,こちらがお勧めです.

set term pngcairo enhanced size 480,360return2
Terminal type set to 'pngcairo' Options are ' background "#ffffff" enhanced fontscale 1.0 size 480, 360 '
set output "gnuplot-pngcairo.png"return2

これは,cairo と呼ばれるライブラリを用いて画像を書くもので,次のような特徴があります.

  • 線やフォントの縁がなめらかになります.
  • 上のように,set term で enhanced 指定をしておくと,上付き文字や下付き文字も表示させることができます(環境が整っていれば Terminal type が png であってもできるはずなのですが).

Terminal type が png のときと同じように,

set xrange [-1:1]return2
plot x**2 title "x^2", sin(x), cos(x)return2

で出力した画像を以下に載せます.上の terminal type が png であったときの画像と比べてみて下さい.
pngcairo での 出力例
印刷するときはカラーでできるとは限りませんから,白黒で出力したいこともあるでしょう.また,フォントが気に入らないこともあるでしょう.そのような場合,set term の行にオプションをつけます.
set term pngcairo monochrome enhanced font "Times" fontscale 1.2 size 480,360return2
Terminal type set to 'pngcairo' Options are ' background "#ffffff" enhanced font "Times" fontscale 1.2 monochrome size 480, 360 '
set output "gnuplot-pngcairo2.png"return2

  • monochrome は,白黒で出力することを指定します.
  • フォントは,font “Times” などと指定します.
  • 他の Terminal type でも使えますが,fontscale 1.2 で,フォントサイズが標準の 1.2 倍になります.

これによる出力結果は下のようになります.

PDF 形式:pdfcairo

cairo を使って PDF 形式のファイルを作成するときに使うのが pdfcairo です.LaTeX 文書に挿入する時はこの形式を用いるのが一番楽でしょう.

set term pdfcairo enhanced size 4in, 3inreturn2
Terminal type set to 'pdfcairo' Options are ' transparent enhanced fontscale 0.5 size 4.00in, 3.00in '
set output "gnuplot-pdf.pdf"return2

以下の点を除けば,ほぼ pngcairo と使い勝手は同じです.出力例 gnuplot-pdf.pdf を載せておきます.

  • 画像サイズは(ピクセル単位でなく)「size 5cm,3in」 などと実際の長さで指定します.標準サイズは 5 in × 3 in です.
  • 複数回 plot を行うと,できた PDF ファイルは複数ページの物になります.

EPS 形式:postscript, epscairo

hwb27.11 グラフィックス にも書かれているように,LaTeX の文書中に画像を張り込むとき,EPS (Encapsulated Postscript) 形式で画像を作っておくのが伝統的でした.なので,このページでも EPS 形式で画像を出力する方法を説明します.
EPS 形式の画像を出力するには,下のように Terminal type に postscript を指定し,eps オプションをつけます.

set term postscript eps enhanced size 10cm,5cmreturn2
Terminal type set to 'postscript' Options are 'eps enhanced defaultplex \ leveldefault monochrome colortext \ dashed dashlength 1.0 linewidth 1.0 butt noclip \ nobackground \ palfuncparam 2000,0.003 \ size 10.00cm, 5.00cm "Helvetica" 14 fontscale 1.0 '
set output "gnuplot-ps.eps"return2

  • 上のように,pngcairo のところで説明した enhanced 指定も使うことができます.
  • 標準は白黒 (monochrome) です.カラーで出力したい場合は,color 指定を加えます.
  • pdfcairo のときのように,画像サイズは(ピクセル単位でなく)5cm などと実際の長さで指定します.標準サイズは 5 in × 3 in です.

あとは,画面上に表示するときと同じようにグラフのオプションを設定したり,plot で実際にグラフを描画したりします.
生成した EPS ファイルのスクリーンショットを下に載せておきます(灰色部分は画像の外です).
EPS 形式への出力

epscairo

pngcairo, pdfcairo と同じように,epscairo も用いることができます.使い方は pngcairo, pdfcairo とほとんど同じで,こちらは標準でカラーになります.

set term epscairo enhanced size 4in, 3inreturn2
Terminal type set to 'epscairo' Options are ' transparent enhanced fontscale 0.5 size 4.00in, 3.00in '
set output "gnuplot-epscairo.eps"return2

例によって,epscairo で生成した EPS ファイルのスクリーンショットを貼り付けておきます.灰色部分は画像の外です.
epscairo でのスクリーンショット

LaTeX への貼り込み用:epslatex

epslatex を使うと,画像部分を EPS 形式で,凡例や目盛などのテキスト部分を LaTeX の記法で書くことができます.標準では白黒になり,set output には TeX ソースの名前を指定します.LaTeX の使い方は hwb27. LaTeX を参照して下さい.

set term epslatex size 4in,3inreturn2
Terminal type set to 'epslatex' Options are ' leveldefault monochrome blacktext \ dashed dashlength 1.0 linewidth 1.0 butt noclip \ nobackground \ palfuncparam 2000,0.003 \ noheader size 4.00in, 3.00in "" 11 fontscale 1.0 '
set output "gnuplot-epsl.tex"return2

epslatex を使う場合,凡例の表示などに LaTeX の記法をそのまま書くことができます.下に例を示しますが,その前に注意点を述べておきます.

  • 2 つのファイルが出力されます.上の例では,図版部分の gnuplot-epsl.eps と,テキスト部分の LaTeX ソース gnuplot-epsl.tex です.
  • テキスト部分はほぼそのまま LaTeX ソースに出力されますが,コマンドの開始を表す \(バックスラッシュ)は \\ と2つ重ねないといけません.
  • 上に関連して,特に目盛で負の数が出力されるときは,下の例の 2, 3 行目のように目盛が数式として表示されるようにします.LaTeX は地の文では – をハイフンとして認識するためです(hwb27.10 欧文の書き方 参照).

set xrange [-1:1]return2
set format x "$%g$"return2
set format y "$%g$"return2
plot x**2 title "$x^2$", sin(x) title "$\\sin x$", x title "test"return2

こうして作った図を LaTeX 文書に挿入するには,次のように \input コマンドを使います.

\documentclass{jsarticle}
\usepackage[dvipdfmx]{color,graphicx} % [dvipdfmx] の部分は使うソフトウェアに合わせること
\begin{document}
\begin{figure}
\centering
\input{gnuplot-epsl.tex} % \includegraphics はここでは使いません
\caption{epslatexで図を入れた例}
\end{figure}
\end{document}

epslatex の例