はじめに
学術論文に掲載する図は多くの場合,ビットマップ画像ではなくベクタ画像が求められる(と筆者は考えている).
グラフの目盛りや凡例など,ベクタ画像にしておいた方が後々編集もしやすく,拡大縮小にも柔軟に対応できるため,利便性が高い.
一方で,膨大な量の点列など,ベクタ画像には不向きなデータが存在する.
当該データは上記の利得が得られないだけでなく,容量が大きくなり大変扱いづらい.
この問題を解決するためにはどのようなやり方が考えられるだろうか.
解決策
いくつか方法はあるだろうが,gnuplot
を使った解決策として次のような手順が有効である.
- ベクタ画像に不向きなデータを,目盛りや凡例などの情報は付与せずに
PNG
形式で出力する - 用意した
PNG
形式の画像を新たにPDF
として出力する
具体例
Logistic map の bifurcation diagram(分岐図)で実際に PDF
を作成してみる.
データ点列は別記事で紹介した方法で out.bf1
として生成した.
スクリプト
設定ファイル
個々に設定する必要のある値をひとまとめに設定ファイル内に置いた.
config.gp
# PNG settings
FILE_NAME = "out.bf1" # 入力 データファイル名
PNG_NAME = "out.png" # 出力 PNG ファイル名
PNG_WIDTH = 2000 # PNG の解像度(横)
PNG_HEIGHT = 2000 # PNG の解像度(縦)
ALPHA = "D0" # alpha-channel: 0-255 in hex
COLOR = "EB811B" # 色指定
XFROM = 2.4 # 出力範囲(x 軸)
XTO = 4.0 # 出力範囲(x 軸)
YFROM = 0 # 出力範囲(y 軸)
YTO = 1 # 出力範囲(y 軸)
# PDF settings
PDF_NAME = "out.pdf" # 出力 PDF ファイル名
XLABEL = "{/:Italic r}" # 凡例(x 軸)
YLABEL = "{/:Italic x}" # 凡例(y 軸)
#EOF
PNG 出力
makepng.gp
load("config.gp");
set term png size PNG_WIDTH, PNG_HEIGHT transparent truecolor
set lmargin screen 0
set rmargin screen 1
set tmargin screen 0
set bmargin screen 1
unset tics
unset border
unset key
set out PNG_NAME
set xr [XFROM:XTO]
set yr [YFROM:YTO]
p FILE_NAME every ::100 w d lc rgb "#".ALPHA.COLOR
#EOF
-
transparent
で透明度を有効にし,ALPHA
で値を指定しています.
PDF 出力
makepdf.gp
load("config.gp");
set term pdf font "Times-New-Roman, 24" size 8, 8
set out PDF_NAME
set grid front
set tics
set size sq
set xr [XFROM:XTO]
set yr [YFROM:YTO]
set xlabel XLABEL
set ylabel YLABEL
p PNG_NAME binary filetype=png \
origin=(XFROM, YFROM) dx=((XTO-XFROM)/(1.*PNG_WIDTH)) dy=((YTO-YFROM)/(1.*PNG_HEIGHT)) \
with rgbimage
#EOF
ディレクトリ構成
.
├── config.gp
├── makepdf.gp
├── makepng.gp
└── out.bf1
実行
$ gnuplot makepng.gp # ファイル名「PNG_NAME」の PNG が生成される
$ gnuplot makepdf.gp # ファイル名「PDF_NAME」の PDF が生成される
Qiita の仕様の都合で
JPG
にエクスポートしてある.