The One with ...

思いついたことや作業メモなどを公開しています

再現可能な図

校正をしてて気づいた点をメモしておきます.

図は完全にreproducibleなコードを残しておくべきである.

例えば,Mathematicaで独自関数をplotする場合, パラメータの数値なども図と一緒に出力するようなコードを書いておく.

Module[{plot1, point = 18, t1, t2, \[Rho] = 0.5},
 t1 = Graphics[
   Text[Style["G of Income", FontSize -> point], {0.6, 0.3}]];
 t2 = Graphics[
   Text[Style["G of Human Capital", FontSize -> point], {0.6, 0.5}]];
 plot1 = Plot[{
    giniincome[0.5, s1, 1, \[Rho]],
    ginihuman[s1]
    }, {s1, 0, 1}, 
   PlotStyle -> {{Black, Thick, Dashed}, {Gray, Thick}}];
 Show[plot1, t1, t2, PlotRange -> {0, 1},
  Frame -> True, 
  FrameLabel -> {TableForm[{{"\!\(\*SubscriptBox[\(\[Sigma]\), \(1\)]\
\) of Human Capital"}, {"\[Alpha]=0.5, \
\!\(\*SubscriptBox[\(\[Sigma]\), \(2\)]\)=1, \[Rho]=0.5"}}], 
    "Inequality (Gini index)"},
  ImageSize -> Large, LabelStyle -> {FontSize -> point}, 
  AxesStyle -> Directive[point], GridLines -> Automatic, 
  ImageSize -> Medium]
 ]

ここでは,凡例をplot内に書き込み,パラメータ値をフレーム外に表示させている.ここでTeXやWordなどで 編集している本文のキャプションではなく,計算用ソフト上のグラフィックオブジェクトとして, テキスト文字を埋め込んでしまうのが,ポイントだ.

同じことはggplot2を使えばRでもできる.

こうすれば図を変更した後にキャプションをいちいち修正しなくて済む.なぜなら図を変更したとき コードも修正されているからだ(本当は関数の引数とキャプションの値が同期しているのが望ましい).

実行例はこんな感じだ.

f:id:hamada7418:20161003112440j:plain

複数の線が異なるパラメータに対応しているなら,こんな描き方でも分かりやすいと思う.

f:id:hamada7418:20161003112617j:plain

Mathematicaには出力した図に,オブジェクトをGUI処理で重ね書きする機能があるが, 多少面倒でもグラフィックオブジェクトをコードで書いて,最後にShowでまとめて表示 したほうがよい.

急がば回れ,というやつだろう.要は「未来の自分」が内容を忘れていても, Enterキー一発で,再現できるようなコードを残しておくと,後でラクなのだ.