@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

Numbers風のgnuplot

http://とうごろう.jp/wiki/その他/GnuplotでKeynote風のグラフを作成する/

を参考に,入力データをもってくれば以下のスクリプトで一気にepsファイルを作成できます.

ってブログ書こうとして気がついたけど,plotする行はデータとかラベルが変わるなら変更しなあかんな...

まーその辺はいじってください.オプションで変更できるようにしたところで汎用性は上がるのだろうか

#!/bin/bash
# -*- shell-script -*-

if [ -z $1 ]
then
    echo Usage: `basename $0` inputfile
    exit
fi


echo "plot from $1"
FILE=$1
# 拡張子を取り除く
BASE=`echo ${FILE%.*}`

# cf.http://とうごろう.jp/wiki/その他/GnuplotでKeynote風のグラフを作成する/
gnuplot <<EOF
# 文字を相対的に大きくするため,グラフのサイズ(size)を小さくします.
set size 0.75,0.75
# # HD用に16:9のグラフにする場合
# set size 0.75,0.5625
# 凡例(key)をグラフの外(outside)の中央(center)の上(top)の位置に水平方向に並べ(horizontal)線とテキストを入れ替えて(reverse)左揃えにし(Left)線の長さ(samplen)を2にします
set key outside center top horizontal reverse Left samplen 2
# 枠(border)を取り除きます
unset border
# X軸の目盛り(xtics)を1刻みで大きさ(scale)を0に
set xtics 1 scale 0
# Y軸の目盛り(ytics)を25刻みで大きさ(scale)を0に
set ytics 25 scale 0
# 補助線(grid ytics)をひき,幅(lw)はKeynoteっぽく細くし,
# 線のタイプ(lt)は枠で使用されていた黒色の実線にします
set grid ytics lw 0.1 lt -1
# グラフの線のスタイルをKeynoteを参考に
# 線のタイプを実線(lt 1),線の色をRGBで指定し(lc rgbcolor "#RRGGBB")
# 線幅を12にし(lw 12),データの記号を円にし(pt 7),ポイントのサイズを2倍にします(ps 2)
set style line 1 lt 1 lc rgbcolor "#354E66" lw 12 pt 7 ps 2
set style line 2 lt 1 lc rgbcolor "#8D484A" lw 12 pt 7 ps 2
# # 線が増えたときは次のようにスタイルを順次追加します.
# gnuplot> set style line 3 lt 1 lc rgbcolor "#C09330" lw 12 pt 7 ps 2
# gnuplot> set style line 4 lt 1 lc rgbcolor "#3A5A2D" lw 12 pt 7 ps 2
# gnuplot> set style line 5 lt 1 lc rgbcolor "#454242" lw 12 pt 7 ps 2
# gnuplot> set style line 6 lt 1 lc rgbcolor "#52466C" lw 12 pt 7 ps 2
# 出力の設定
set terminal postscript eps enhanced color
# 出力先ファイル名
set output "$BASE.eps"
# プロット ls 1,ls 2で線のスタイルを選択している
plot [][0:] "$FILE" u 1:2 w lp ls 1 t "Region 1", "$FILE" u 1:3 w lp ls 2 t "Region 2"
EOF
echo "plot done."
# グラフの丸を中抜き(白塗り)にする
sed "s/\/CircleF {stroke \[\] 0 setdash hpt 0 360 arc fill} def/\/CircleF {stroke \[\] 0 setdash gsave LCw setrgbcolor 2 copy hpt 0 360 arc fill grestore hpt 0 360 arc stroke} def/g" $BASE.eps > __$BASE.tmp
echo -n "Save $BASE.eps ... "
mv __$BASE.tmp $BASE.eps
echo "done."