2011年1月20日木曜日

Rで途中波線の使い方

Rで途中波線 (Broken axis)の使い方


グラフを書く際に一部の区間にデータがないため、無駄に間隔が広がってしまうような図になる場合、軸の途中に波線を書いて途中を省略するというやり方がある。

テレビ番組などのインチキグラフなどでよく使われる表現なのだが、一応手順の紹介。

まずplotrixライブラリが必要なので、install.packages("plotrix")コマンドなどで、あらかじめインストールしておく。

使用するデータとしては、
xに、1から10まで、1つ間隔の数値データ。
yに、1から5まで、そして16から20までの1つ間隔の数値データがあるとする。
x <- seq(1,10) y <- c(seq(1,5), seq(16,20))

※このままプロットすると左下の図のようになる。 
x.range <- c(1,10)
y.range <- c(1,20)
plot(x, y, xlim=x.range, ylim=y.range)

これらのデータから、y軸の6〜15のあいだにギャップ(10)があることがわかるので、その区間を省略する場合は、 まずyの数値の大きなグループの値そのものをギャップの分だけずらす。
gap <- 10 y[6:10] <- y[6:10] - gap

y軸の最大値もギャップの分だけずらす
y.range[2] <- y.range[2] - gap

そしてまずy軸を描かずにプロットし、
plot(x, y, xlim=x.range, ylim=y.range, yaxt="n")

y軸のラベルをプロットし、
axis(2, at=seq(1,10), label=c(seq(1,5), seq(16,20)))

最後に途中波線を描くと右下の図のようになる。
axis.break(2,5.5)




一連のスクリプトは以下の通り

library(plotrix)


x <- seq(1,10)
y <- c(seq(1,5), seq(16,20))

x.range <- c(1,10)
y.range <- c(1,20)

offset <- 10


layout(matrix(c(1,1,2,2),2,2))


## Standard plot
plot(x, y, xlim=x.range, ylim=y.range)


## Shifting value
y[6:10] <- y[6:10] - offset
y.range[2] <- y.range[2] - offset


## Plot with broken axis
plot(x, y, xlim=x.range, ylim=y.range, yaxt="n")
axis(2, at=seq(1,10), label=c(seq(1,5), seq(16,20)))
axis.break(2,5.5)

0 件のコメント:

コメントを投稿