Bluepostech

プログラムとかはこっち

【gnuplot】png出力するとフォントが設定できない問題

理系ならほぼ使いこなせるのが必須、ひょっとすると文系でも統計処理で使うかもしれない、グラフ作成ソフトのスタンダード、それがgnuplotである。よく「グニュプロット」と呼ばれるが、本来は「ニュープロット」である。残念ながら僕の研究室には正しい読み方をしている人はいないのだが。

さて、gnuplotはよくLinuxサーバに入っているのだが、いろいろな形式で出力することができる。画面に出すこともできるし、TeXと相性のよいepsファイル、pngjpegのような一般的な画像ファイルでも出力できる。

しかし、pngで出力するとき、多くの場合ひとつ問題がある。目盛などに使われるフォントがいじれないのだ。フォントを変えられないとかならまだしも、大きさがいじれない。なのでpngで出力すると内蔵フォントが使われるのだが、これまた汚くて小さい。

f:id:bluepost69:20151009035305p:plain

これを回避する方法は2つある。ひとつはeps経由で出力することだ。

gnuplotを起動して次のようにターミナルを設定し、一旦epsファイルで出力する。epsファイルではフォントがいじれる。

gnuplot> set terminal postscript enhanced color font 'Arial,20'

LinuxにはImage Magickというソフトが入っていることが多い。これを使うとepsファイルをpngなどに変換できる。コマンドライン上で実行できるのだが、ベタうちだと画像サイズが小さいので-densityオプションで思い思いのサイズにする。

convert -density 144 hoge.eps hoge.png

(hoge.epsがgnuplotで出したファイル)

これでpngファイルが出力される。ただし背景は透明になっているほか、角度が90度傾いている。そこで同じくImage Magickの機能で回転する。

mogrify -rotate 90 hoge.png

f:id:bluepost69:20151009040135p:plain

だいぶ見やすくなった。gnuplotはターミナルから実行する時、-eオプションで直接gnuplotのコマンドを実行できるので、pltファイルにまとめたスクリプトを実行、変換と回転を一挙に行うシェルスクリプトを書いておくと便利だろう。

gnuplot -e "load 'hoge.plt' "

二つ目の方法として、pngcairoというターミナルがある。新しいシステムには入っているらしいが、入っているときはこれを使えばそのままpngで出すことができる。使い方はターミナルをpngと設定していたところをpngcairoとするだけで、それ以外は何も変わらない。

f:id:bluepost69:20151009040516p:plain

文字の大きさはeps経由の場合とやや違うが、そこは適宜調整すればよい。

2016.02.19 追記:pltファイルを読ませるときだが、ファイル名を入れるだけでよい。具体的には

gnuplot hoge.plt

でよい。

ただし-eオプションでloadさせる場合、pltを変数が必要な形で書いておき、セミコロンで区切ることで変数を代入してpltを読ませることもできる。たとえば、

gnuplot -e "n=10 ; load 'hoge.plt' "

といった感じである。