在`grid` /`ggplot`中复制`layout`

时间:2014-07-07 14:02:18

标签: r plot ggplot2

我尝试复制以下代码,但直方图被ggplot调用替换。所以,这有效:

layout(matrix(c(1, 2, 3, 4, 4, 3, 4, 4, 5), ncol=3))
hist(1:20)
hist(1:40)
hist(1:60)
hist(1:80)
hist(1:90)

这并不是(每个ggplot创建一个新的全尺寸图像而不是布局的一部分):

layout(matrix(c(1, 2, 3, 4, 4, 3, 4, 4, 5), ncol=3))
ggplot(data.frame(x=1:20)) + stat_bin(aes(x=x))
ggplot(data.frame(x=1:40)) + stat_bin(aes(x=x))
ggplot(data.frame(x=1:60)) + stat_bin(aes(x=x))
ggplot(data.frame(x=1:80)) + stat_bin(aes(x=x))
ggplot(data.frame(x=1:90)) + stat_bin(aes(x=x))

第一段代码产生以下布局:

enter image description here

如何使用ggplot以与第一次layout调用相同的方式安排绘图?

1 个答案:

答案 0 :(得分:3)

layout()仅适用于基本图形。 ggplot使用具有不同方式或排列图的网格图形。尝试查看multiplot helper function。它的layout=参数与layout函数非常相似。例如

multiplot(layout=matrix(c(1, 2, 3, 4, 4, 3, 4, 4, 5), ncol=3),
    ggplot(data.frame(x=1:20)) + stat_bin(aes(x=x)),
    ggplot(data.frame(x=1:40)) + stat_bin(aes(x=x)),
    ggplot(data.frame(x=1:60)) + stat_bin(aes(x=x)),
    ggplot(data.frame(x=1:80)) + stat_bin(aes(x=x)),
    ggplot(data.frame(x=1:90)) + stat_bin(aes(x=x))
)

enter image description here