> R Recipe: aligned-plot-naive sumo.ly/865O 上下の図の「はば」をそろえるわざの紹介. R 作図でありがちなめんどう,ggplot2 だとわりと簡単に何とかなるみたい… pic.twitter.com/3UeF6qZrFu
ggplot2 を使えば,下の図のように,横幅を揃えるのが簡単といっているのかな?
プログラムは,
data <- data.frame(x = seq(0, 100, 1))
#
data = transform(data,
y1 = sin(x * pi / 10),
y2 = x**2
)
library(ggplot2)
library(gridExtra)
p1 <- ggplot(data, aes(x = x)) + geom_line(aes(y = y1)) + theme_classic()
p2 <- ggplot(data, aes(x = x)) + geom_bar(aes(y = y2), stat = "identity") + theme_classic()
p1
p2
なんだろうか。知らんけど。
一方,基礎的な描画関数を使うと,
x <- seq(0, 100, 1)
data <- data.frame(x, y1 = sin(x * pi / 10), y2 = x**2)
layout(matrix(1:2, 2))
old <- par(mar=c(3, 3, 1, 1), mgp=c(1.8, 0.6, 0))
plot(data$y1 ~ x, type="l")
plot(data$y2 ~ x, type="h")
par(old)
ともなろう。
描かれるのは
どっちが簡単?決まってる,後者。
ggplot2 は呪文みたいだなあ。
それに,図自体のキレイさは誰の意見も一致するだろう。あえて,言及しない。
下のヒストグラムの太さが違うように見えるのは,連続量を離散値に四捨五入して描いているからあんなになる。本来は等間隔の棒グラフが等間隔の隙間で区切られて並んでいるはず。
それは,コンピュータの原理状仕方ないけど,それが目に見えるみっともなさで表現されるのは不都合。plot(..., type="h") のように線で逃げるのが穏当。
もっとも,plot(..., type="h") でも,線の太さが違うように見えるところがあるのは,ご愛敬。
この例ではbaseの方が簡単というのは,その通りと思います。なお,上下2分割で良ければlayout(1:2)で十分です。
元の英語記事にあるように,上下のサイズを3:2にしたい場合は,layout(c(1,1,1,2,2))でいけます。