R のプロットに複数の軸をつける


上図のように R で複数の軸をつけるには、axis の at と labels 引数を用いる。

df <- read.table("/tmp/test") # CTRUNCATE のログとかから切り出したもの

par(mar = c(10, 4, 4, 2))
plot(df$V1, df$V2, type="l", main="Wilson plot", lwd=2,
     ylab="log(I / I_th)", xlab="1 / Resolution ^ 2")
tick_at <- c(2.0, 2.5, 3.0, 4.0, 6, 10, 15, 30)
axis(1, line=5, at=1/tick_at/tick_at, labels=tick_at)
mtext("Angstrom", 1, line=8) # はてなだと文字化けするのでウムラウトなどを外した

http://stat.biopapyrus.net/graph/axis.html で紹介されている方法は、複数のデータが存在する場合に用いる。今回は、データの系列は1つだけなので、plot 関数を二度呼んではいけない。plot 関数の呼び出しで、内部的な座標系が再設定されてしまうからだ。摂氏温度と華氏温度のように線形な対応がある場合はそれでも実現できるが、今回のように非線形な対応の場合はうまくいかない。

上の図をよく見ると、10 と 15 の刻みだけ入っていて、数字が表示されていない。これは、axis 関数が文字の重なりを嫌うためである。実際には、作図サイズに合わせてtick_at を調節する必要がある。刻みだけ入っていると、読者に誤解を与える危険がある。