控制并排基本图形和ggplot2图形的列宽

时间:2013-01-16 12:29:26

标签: r graphics ggplot2

@Ricardo Saporta提出了here一种简单的方法,可以将基本图形和ggplot图形组合成多个图形。

我用这种方式在左边绘制一个基本图形,在右边绘制一个ggplot图形,它实际上包含两个图形(这是一个人为的例子,不是真实的例子,但它与我的实例具有相同的结构):< / p>

library(ggplot2)
library(gridExtra)
library(plotrix)

Mvalues <- matrix(rpois(9,1), ncol=3)
Mcolors <- matrix(rpois(9,5), ncol=3)

par(mfrow=c(1,2))
color2D.matplot(x=Mvalues, show.values=2, cellcolors=Mcolors, 
    xlab="x", ylab="y", axes=FALSE, vcex=0.4)
gg2 <- ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar(position="dodge") 
ta <- do.call(arrangeGrob, list(gg2,gg2))
vp.Left <- viewport(height=unit(1, "npc"), width=unit(0.5, "npc"), 
    just="left", y=0.5, x=0.5)
print(ta, vp=vp.Left)

plot

非常好。但现在我希望基本图形的宽度大于ggplot图形。怎么做 ?我使用layout()函数尝试这样做失败了。

1 个答案:

答案 0 :(得分:4)

你走了:

使用不同宽度的布局。请注意我如何将第一列定义为第2列宽度的两倍:

layout(matrix(c(1, 2, 1, 3), ncol=2, byrow=TRUE), widths=c(2, 1))

设置图形

layout(matrix(c(1, 2, 1, 3), ncol=2, byrow=TRUE), widths=c(2, 1))
color2D.matplot(x=Mvalues, show.values=2, cellcolors=Mcolors, 
                                xlab="x", ylab="y", axes=FALSE, vcex=0.4)
gg2 <- ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar(position="dodge") 
ta <- do.call(arrangeGrob, list(gg2,gg2))

现在定义视口。你的代码几乎就在那里。我只是将其修改为右对齐,并将宽度更改为33%:

vp <- viewport(height=unit(1, "npc"), width=unit(0.33, "npc"), 
               just="right", x=1, y=0.5)

最后,打印剩余的图形:

print(ta, vp=vp)

enter image description here