満月紀行

備忘録

gnuplot で EPS で作ったスペクトログラムの中身だけラスタライズ(?)

gnuplot でスペクトログラムを EPS で作成したらファイルサイズが非常に大きくなった。軸ラベルのフォントや文字をあとで変更する可能性を考えると EPS や PDF で作成しておきたい。はじめは EPS で出力してスペクトログラムの枠の中身だけラスタライズすることを考えたが,メモリを食いつぶしてしまい IllustratorInkscape では開くことができなかった。そこで,中身だけを PNG に変換してしまい,後から EPS に PNG を埋め込むことにした。あ,環境は Linux Mint です。

要約

  • gnuplot でスペクトログラム
  • あとで軸ラベルを編集するかもしれないので EPS でほしい
  • スペクトログラムの中身を PNG で埋め込んだ EPS を作る

中身だけ(枠や目盛りなしで)のグラフを出力する

set margin 0
set noborder
set notics

set nocolorbox  # スペクトログラムなので

これで中身だけ出てくる。なぜか余白があるので, epstool で除去する。 参考:Untitled blog: [EPS]余白をなくす

$ epstool --copy -b input.eps input_crop.eps

これを PNG に変換する。

$ convert -density 600 input_crop.eps input_crop.png

PNG を埋め込んだグラフを出力する

このサイトに従う:gnuplotのグラフにPNG・JPGファイルなどを埋め込む - 米澤進吾 ホームページ

#! /usr/bin/gnuplot
reset

set multiplot

###1
set size 1, 1
set origin 0, 0
set margin 0
set noborder
set notics

set size ratio -1
set autoscale xy

plot "input_crop.png" binary filetype=png with rgbimage notitle

###2
unset size
unset origin
unset margin

set pm3d map
splot 'dummy.csv' notitle
unset pm3d

unset multiplot

if (exist("FLAG") == 0) \
     set out "output.eps";\
     set terminal postscript eps color;\
     FLAG = 1; reread

undefine FLAG
set out

unset key
unset output

上記を hoge というファイル名で保存した時, $ gnuplot hoge で実行する。すると,スペクトログラムの中身の PNG を埋め込んだ EPS ファイルが生成される。

これ書きながら思ったんですが,はじめから epslatex で出しとけばよかったのでは???