GnuplotでKeynote風のグラフを作成する

| Topic path: Top / その他 / GnuplotでKeynote風のグラフを作成する

*はじめに [#j1d0c09c]

MacのKeynote(WindowsのPowerPointに相当)はグラフがデフォルトでもカッコいいです.

たとえば,折れ線グラフはこんな感じになります.

&ref(graph_keynote.png,nolink);


しかしながら,KeynoteのグラフはX軸を対数表示することができないなど細かいところでまだまだ力不足です.

したがって,研究でグラフを作成するときはグラフ作成ツールGnuplotのお世話になることがまだまだ多いです.

ところが,このグラフと同じデータを用意してGnuplotでグラフを作成すると次のようなあまりカッコ良くないグラフになってしまい,ちょっと残念です.

&ref(graph_gnuplot_1.png,nolink);

そこで,Gnuplotの設定を変更してKeynote風のグラフを作成します.

この記事の内容はGnuplot 4.3.0 patchlevel 0で確認しました.


*作り方 [#h9585e6f]

まず,Keynoteのサンプルと同じデータのファイル「graph.dat」を用意します.

 # YEAR Reg1 Reg2
 2007   17   55
 2008   26   43
 2009   53   70
 2010   98   58

Gnuplotでグラフを描くには,次のように入力します. 
(TeXで作成する論文用なので,EPSファイルに書き出しています.)

#geshi(gnuplot){{
gnuplot> set terminal postscript eps enhanced color
gnuplot> set output "graph.eps"
gnuplot> plot "graph.dat" u 1:2 w lp t "Region 1", "graph.dat" u 1:3 w lp t "Region 2"
}}

こうしてできたグラフが上で紹介したものです.

&ref(graph_gnuplot_1.png,nolink);

これから,Gnuplotの設定を変更してKeynote風にします.

まず,文字を相対的に大きくするため,グラフのサイズ(size)を小さくします.

#geshi(gnuplot){{
gnuplot> set size 0.75,0.75
}}

凡例(key)をグラフの外(outside)の中央(center)の上(top)の位置に水平方向に並べ(horizontal)線とテキストを入れ替えて(reverse)左揃えにします(Left).
HD用に16:9のグラフにする場合は,上の替わりに次のようにします.
#geshi(gnuplot){{
gnuplot> set size 0.75,0.5625
}}

凡例(key)をグラフの外(outside)の中央(center)の上(top)の位置に水平方向に並べ(horizontal)線とテキストを入れ替えて(reverse)左揃えにします(Left).
#geshi(gnuplot){{
gnuplot> set key outside center top horizontal reverse Left
}}

枠(border)を取り除きます.

#geshi(gnuplot){{
gnuplot> unset border
}}

X軸の目盛り(xtics)を1刻みで大きさ(scale)を0にします.

#geshi(gnuplot){{
gnuplot> set xtics 1 scale 0
}}

Y軸の目盛り(ytics)を25刻みで大きさ(scale)を0にし,補助線(grid ytics)を引きます.
このとき,補助線の幅(lw)はKeynoteっぽく細くし,線のタイプ(lt)は枠で使用されていた黒色の実線にします.

#geshi(gnuplot){{
gnuplot> set ytics 25 scale 0
gnuplot> set grid ytics lw 0.1 lt -1
}}

ここで,一旦グラフを作り直します.

このとき,Y軸の描画範囲を0からにします.

#geshi(gnuplot){{
gnuplot> set terminal postscript eps enhanced color
gnuplot> set output "graph.eps"
gnuplot> plot [][0:] "graph.dat" u 1:2 w lp t "Region 1", "graph.dat" u 1:3 w lp t "Region 2"
}}

すると,次のようなグラフができます.

&ref(graph_gnuplot_2.png,nolink);


ここから,さらにKeynoteっぽくします.

凡例の設定に線の長さ(samplen)を追加します.

#geshi(gnuplot){{
gnuplot> set key outside center top horizontal reverse Left samplen 2
}}

グラフに使用する線のスタイルをKeynoteを参考にして次のように設定します.
線のタイプを実線にし(lt 1),線の色をRGBで指定し(lc rgbcolor "#RRGGBB"),線幅を12にし(lw 12),データの記号を円にし(pt 7),ポイントのサイズを2倍にします(ps 2).

#geshi(gnuplot){{
gnuplot> set style line 1 lt 1 lc rgbcolor "#354E66" lw 12 pt 7 ps 2
gnuplot> set style line 2 lt 1 lc rgbcolor "#8D484A" lw 12 pt 7 ps 2
}}

今回は2本の線しか描かないのでこれ十分ですが,もっと線が増えたときは次のようにスタイルを順次追加します.

#geshi(gnuplot){{
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
}}

この線のスタイル(ls)を用いてグラフを作り直します.

#geshi(gnuplot){{
gnuplot> set terminal postscript eps enhanced color
gnuplot> set output "graph.eps"
gnuplot> plot [][0:] "graph.dat" u 1:2 w lp ls 1 t "Region 1", "graph.dat" u 1:3 w lp ls 2 t "Region 2"
}}

すると,次のようなグラフができます.

&ref(graph_gnuplot_3.png,nolink);


ここまではGnuplotでできます.

GnuplotでPostScript用に用意されているデータの記号には,Keynoteで使われているような白で塗られた円はありません([[ここ:http://tyche.qe.eng.hokudai.ac.jp/~ken/gnuplot/top_col.html]]を参照).

そこで,EPSファイルを直接編集してデータの記号を変更します.

テキスト・エディターで「graph.eps」を開き,次の行を見つけます.

#geshi(postscript){{
/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
}}

これを次のように書き換えます.

#geshi(postscript){{
/CircleF {stroke [] 0 setdash gsave LCw setrgbcolor 2 copy hpt 0 360 arc fill grestore hpt 0 360 arc stroke} def
}}

これで次のようなグラフができます.

&ref(graph_gnuplot_4.png,nolink);


かなりKeynoteっぽいグラフができました.



*まとめ [#g9be110c]

以上の手順をまとめると次のようになります.

-''graph.dat''
 # YEAR Reg1 Reg2
 2007   17   55
 2008   26   43
 2009   53   70
 2010   98   58

-''graph.plt''
#geshi(gnuplot){{
set size 0.75,0.75
set key outside center top horizontal reverse Left samplen 2
unset border
set xtics 1 scale 0
set ytics 25 scale 0
set grid ytics lw 0.1 lt -1
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
set terminal postscript eps enhanced color
set output "graph.eps"
plot [][0:] "graph.dat" u 1:2 w lp ls 1 t "Region 1", "graph.dat" u 1:3 w lp ls 2 t "Region 2"
}}

-''chcircle.sh''
#geshi(bash){{
#!/bin/sh
echo "Load graph.eps ..."
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" graph.eps > __graph.tmp
echo -n "Save graph.eps ... "
\mv __graph.tmp graph.eps
echo "done."
}}
実行すると__graph.tmpという一時ファイルを作りますので注意してください.

-実行
#geshi(bash){{
$ gnuplot "graph.plt"
$ ./chcircle.sh
}}


&ref(graph_gnuplot_4.png,nolink);

グラフは見栄えが大切なので,Gnuplotでもカッコいいグラフを作りましょう.




トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS