我一直在尝试(知道我不应该知道的所有原因)将两个图叠加在一起。我记得当我过去使用视口时,两个图像会叠加在一起。所以grid
不会用另一个覆盖一个图形。在下面的MWE中,当我尝试打印第二个图形时,会删除一个图形。
我做错了什么?感谢
library(grid)
library(ggplot2)
date=seq(as.Date('2012-04-01',"%Y-%m-%d"),as.Date('2013-03-27','%Y-%m-%d'),1)
tp1=data.frame(Date=date,bond=rnorm(361,100,2),equity=rnorm(361,60,15))
vp=viewport(x=0.5,y=0.5,height=1,width=1)
a = ggplot(tp1,aes(Date,bond)) + geom_line(colour=I("blue")) + xlim(range(tp1$Date))
b = ggplot(tp1,aes(Date,equity)) + geom_line(colour=I("red")) + xlim(range(tp1$Date))
print(a,vp=vp)
print(b,vp=vp)
答案 0 :(得分:4)
我没有看到如何使用视口来覆盖2 ggplot2图。也许你使用一些简单的网格图形来做到这一点,而不是复杂的ggplot2图(很多视口都有很多细节)。视口只是您基本上定义绘图的尺寸/比例的上下文。
Here,一个做你想做的事的代码。我只需添加一小部分并使用您的绘图说明进行调整。
所有代码是:
library(ggplot2)
library(grid)
library(gtable)
grid.newpage()
# two plots
a = ggplot(tp1,aes(Date,bond)) + geom_line(colour=I("blue")) + xlim(range(tp1$Date))
b = ggplot(tp1,aes(Date,equity)) +
geom_line(colour=I("red")) +
theme(panel.background = element_rect(fill = NA))
# extract gtable
g1 <- ggplot_gtable(ggplot_build(a))
g2 <- ggplot_gtable(ggplot_build(b))
# overlap the panel of 2nd plot on that of 1st plot
pp <- c(subset(g1$layout, name == "panel", se = t:r))
g <- gtable_add_grob(g1, g2$grobs[[which(g2$layout$name == "panel")]], pp$t,
pp$l, pp$b, pp$l)
## what I dd is to plot a new viewports.
vp=viewport(x=0.5,y=0.5,height=0.5,width=0.5)
pushViewport(vp)
grid.draw(g)
upViewport()