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

2009-08-10 (月) 09:25:27 (3046d) | Topic path: Top / その他 / GnuplotでKeynote風のグラフを作成する

はじめに

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

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

graph_keynote.png

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

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

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

graph_gnuplot_1.png

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

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

作り方

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

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

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

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"

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

graph_gnuplot_1.png

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

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

gnuplot> set size 0.75,0.75

HD用に16:9のグラフにする場合は,上の替わりに次のようにします.

gnuplot> set size 0.75,0.5625

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

gnuplot> set key outside center top horizontal reverse Left

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

gnuplot> unset border

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

gnuplot> set xtics 1 scale 0

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

gnuplot> set ytics 25 scale 0
gnuplot> set grid ytics lw 0.1 lt -1

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

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

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"

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

graph_gnuplot_2.png

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

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

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).

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本の線しか描かないのでこれ十分ですが,もっと線が増えたときは次のようにスタイルを順次追加します.

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)を用いてグラフを作り直します.

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"

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

graph_gnuplot_3.png

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

GnuplotでPostScript用に用意されているデータの記号には,Keynoteで使われているような白で塗られた円はありません(ここを参照).

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

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

/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

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

graph_gnuplot_4.png

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

まとめ

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

  • graph.dat
    # YEAR Reg1 Reg2
    2007   17   55
    2008   26   43
    2009   53   70
    2010   98   58
  • graph.plt
    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
    #!/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という一時ファイルを作りますので注意してください.
  • 実行
    $ gnuplot "graph.plt"
    $ ./chcircle.sh

graph_gnuplot_4.png

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

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