仕事でグラフを作ることになり,この歳になって一からgnuplotを勉強しています.昔はgnuplotというと敷居が高い印象があり,手が出せませんでした.そういえば大昔Macを使っていた時はDeltagraphを使ってた覚えが.
今回は,Windows環境でかなり便利になったらしいgnuplotでグラフを作成してEPSで保存し,最終的にLaTeXに持ち込むということを目標としました.
このエントリーの内容
gnuplotのインストールと初期設定
gnuplot(ニュープロットと読むらしい)は2次元および3次元のグラフを作成するソフトウェアであり,インターネット上で無料で配布されているフリーウェアです.現在ではWindows版やMacOS X版などがあります.
gnuplotのWindows版は現在バージョン5.0.3が最新(2016/06時点)のようです.gnuplotのダウンロードはgnuplotのページからリンクを辿ってsouceforgeからダウンロードできます.
今回は64bit版のインストーラ付きをダウンロードしました.ファイル名は「gp503-win64-mingw.exe」でした.
ファイルをダブルクリックするとインストールのオプションで日本語対応のチェックがあるので入れておきます.
次に追加タスクの選択です.そのままでもいいのですが今回は「実行ファイルのディレクトリをPATH環境変数に追加する」にチェックを入れておきます.こうすることでコマンドプロンプトからの起動が楽になります.
インストールが終了すると,c:\program files\gnuplot\bin\wgnuplot.exeをダブルクリックすればWindows版gnuplotが起動します.x86版をインストールした場合にはc:\program files(x86)…にインストールされます.
gnuplotを起動すると次のような画面になります.
まず最初にすることは言語設定.「画面上で右クリック→choose fontを選択して日本語を選択します」と書いてあるものが多いのですが,日本語対応にチェックを入れたせいかすでにMSゴシックになっていました.
最後に右クリックで「Update c:\users\xxxx\AppData\Roaming\wgnuplot.ini」を選択して保存と書いてあるものも多いのですが,これもしなくて良さそう.
これで準備は完了.
gnuplot基礎の基礎(1) グラフのプロット
gnuplotを起動したらコマンドが出てきます.この「gnuplot>」というコマンドをみるとちょっと手ごわそうな気もしますが,わかりやすい操作方法などがweb上でたくさん公開されていますのでぜひともそれらをご一読ください.
ちなみに私はgnuplotのつかいかた(PDF)をダウンロードして印刷したものを手元においています.
web上だと,「gnuplot 使い方」などで検索するとたくさん出てくるのでそれらをご覧ください.
ここでは,センター試験数学II・Bの平成28年度本試験の問題をサンプルとしてグラフを作成していきましょう.まず作るのはのグラフです.
まず最初にのグラフをgnuplotを使って作成します.「>gnuplot」の後に「plot 2**x」と入力してエンターキーを押すとグラフが作成されます.べき乗は「^」でなく「**」になっています.これに最初ハマりました.
次にを求めるには,「plot (1/2)**x」ではなく,「plot (1/2.)**x」とピリオドを加える必要があります.これは切り捨てするためとありました.
gnuplotにはたくさんの関数が用意されています.必要な関数を調べて入力してみてください.
gnuplot基礎の基礎(2) グラフを重ねる
これらの2つの関数式を同じグラフにするためには「plot 2**x,(1/2.)**x」とコンマで並べます.
するとこんなグラフが.
このグラフはx=0に対称なのがわかりました.
gnuplot基礎の基礎(3) 軸の設定
x軸やy軸の目盛間隔を変更するには「set xtics n」や「set ytics n」を使います.
作成したグラフはy軸方向の値が大きいので100ごと,x軸の目盛は1ごとにしてグラフを作成するとこんな感じになります.
次に軸の表示範囲(値域)です.これは「set xrange[xx:yy]」や「set yrange[xx:yy]」で変更できます.
今回はxの値域を-5から5,yの値域を0から20にしました.先ほどのyticsは大きすぎるので5に変更して再描画するとこんな感じになります.
gnuplot基礎の基礎(4) グリッドと凡例
グラフにグリッドをつけるには「set grid」,凡例(Legend)は「set key」を使います.「set key」コマンドには「left,right,top,bottom,outside,below」という引数があるので,凡例をグラフの右外に表示したい場合には「set key outside」,凡例を表示しない場合には「unset key」を使用します.
また,「set key xxx」のあとにboxオプションがあり,どんな線種でどんなスタイルで凡例を囲むかを指定できます.
「set key outside box lt 1 lw 3 」はlt(linetype)が1(紫)lw(linewidth)が3ptになります.ちなみにlt 2で緑,3で水色,4でブラウン,5は黄色のように見えます.ドキュメントを見ると1は赤で2は緑のようです.
gnuplot基礎の基礎(5) ラベルとタイトル
x軸のラベルは「set xlabel ‘xxxx’」,y軸のラベルは「set ylabel ‘yyyy’」で設定できます.また,タイトルも「set title ‘title’」でつけられます.「’」でも「”」でもどちらでもいけるようです.
オプションで最後にフォントサイズを指定できるので,例えばx軸のラベルにx,y軸のラベルにy,タイトルに「2^xと(1/2)^x」としてフォントにGothicBBB-Medium-EUC-Hを指定してサイズを24ポイントにします.フォントはゴシック体ならこれにしておくほうがいいようです.明朝体であればRyumin-Light-EUC-Hを指定しておきます.
gnuplotに入力するコマンドは「set title ‘2^xと(1/2)^xのグラフ’ font “GothicBBB-Medium-EUC-H,24″」です.フォント指定も「’」でも「”」でもどちらでもいけるようです..
結果としてこのように表示されました.べき乗はちゃんと表示されているようです.
gnuplotのpltファイルからEPSを作成する
gnuplotではコマンドで1つずつ入力するのは面倒なのであらかじめ「ファイル名.plt」というpltファイルを作成しておくと便利です.
後々のことがあるので,エディタを使って面倒の少ないEUCファイルで保存しておきましょう.
今までに作ってきたものをpltファイルに書くのですが,そのままでは文字化けしてしまうので「set terminal」コマンドでpostscript epsを指定してEPSを作成するようにします.「set terminal」コマンドではフォントの指定もできるので,「set terminal postscript eps enhanced “GothicBBB-Medium-EUC-H” 20」とすることができます.
これはEPSを作成し,フォントはゴシック体でサイズ20ポイントを明示しています.
また,「set terminal」コマンドの後に「set output」コマンドを書くことで保存されるファイルを指定できます.今回は「set output ‘c:\users/xxxx/test.eps’」としておきます.
plotコマンドの後に「set output」と1行追加して保存しておきます.
今回のpltファイルはこう書きました.
こうして出来たpltファイルをgnuplotの画面にドラッグすると完成です.指定した場所にepsファイルができていることを確認しましょう.
epsファイルはghostscriptがインストールされていればgsview(gsview32.exe)やsumatraPDFで閲覧できます.
こちらはgsviewで見たもの.
こちらはsumatraPDFで見たもの.
今まではgsviewで閲覧していたのですが,sumatraPDFがeps表示できることを知って常用しています.
今回悩んだのはCorelのCorelDRAW X6 X7などではEPSを開く際に文字化けしてしまい,変換に失敗したと思ったことにありました.
CorelDRAW X7でテキストとして開いたものがこちら.
見事に文字化けしてます.Illustratorを持っている人に見てもらったら,CS2/CS6では文字が置換されるけど開くことができるとのこと.ただし,文字はアウトライン化されており編集はできないんだそうです.
こうして完成したepsはLaTeXでは\includegraphicsコマンドで使うことができます.
DVIOUTでの表示例.
PDFに変換後にsumatraPDFで表示した例.
おまけ
センター試験の問題の他の関数もグラフに書いてみました.
のグラフ(底が2)は,底の変換公式より「plot log10(x)/log10(2)」で求められます.なので,
のグラフと並べるためには,「plot log10(x)/log10(2),2**x」と入力します.
比較のためにy=xのグラフも入れたいので「plot log10(x)/log10(2),2**x,x」と書いて作ったのが次の図です.
gnuplotはコマンドで「help コマンド」を入れると詳細なヘルプが出てくるのでそれを見ても勉強になります.