R 如何将两个绘图与ggplot对齐?

R 如何将两个绘图与ggplot对齐?,r,ggplot2,gtable,R,Ggplot2,Gtable,我尝试使用网格对齐两个绘图,但没有成功。我尝试过调整主题,使绘图边框/大小相同,但尽管使用相同的y坐标,但绘图不对齐。对于下面的例子,我可以使用annotation\u custom(网站上的一些例子),但这限制了我可以添加的文本数量。如有任何建议/修改/备选方案,我们将不胜感激 我丑陋的代码 library(gridExtra) library(ggplot2) # Data my.df<-data.frame(vars=paste("variable",letters[1:8],se

我尝试使用
网格对齐两个绘图,但没有成功。我尝试过调整主题,使绘图边框/大小相同,但尽管使用相同的y坐标,但绘图不对齐。对于下面的例子,我可以使用
annotation\u custom
(网站上的一些例子),但这限制了我可以添加的文本数量。如有任何建议/修改/备选方案,我们将不胜感激

我丑陋的代码

library(gridExtra)
library(ggplot2)

# Data
my.df<-data.frame(vars=paste("variable",letters[1:8],sep="-"),   
  est=seq(-0.2,0.5,0.1),ci.l=seq(-0.2,0.5,0.1)-0.5,ci.u=seq(-0.2,0.5,0.1)+0.5)
my.df$effect<-with(my.df,paste(round(est,1),"(",round(ci.l,2)," ,",round(ci.u,2),")"))                  


# Functions                  

gg.forrest<-function(data, x , y , ymin, ymax , opts=NULL)        {        
 my.min<-floor(data[[ymin]])
 my.max<-ceiling(data[[ymax]])

p<- ggplot(data, aes_string(x=x, y=y, ymin=ymin, ymax=ymax)) + 
    geom_pointrange() + 
    geom_hline(aes(x=0), lty=2) + 
    theme( axis.title.y=element_blank(),axis.ticks.y = element_blank(), axis.text.y=element_text(colour = "black")) +
   coord_flip() +
   theme(axis.text.y=element_text(hjust=0, size=15)) +
   theme( plot.margin = unit(c(1,2,1,1), "lines")) +
   theme(panel.border = element_blank()   ,panel.background = element_blank()) +
   geom_segment(aes_string(y=my.min,yend=my.max,x=0,xend=0))  + 
   opts

  p
} 



gg.forest.text<-function(data, x, label, opts=NULL) {  

  p<- ggplot(data, aes_string(x=0, y=x, label=label)) +  
     geom_text( hjust=0, size=4, colour="black") + 
#    coord_flip() +
     theme_bw() + 
     theme(panel.grid.major = element_blank(), panel.border = element_blank()) +
#    theme(axis.title=element_blank(),axis.ticks = element_blank(), axis.text=element_blank()) +
    theme( axis.ticks = element_blank()) +
   scale_x_continuous( "",breaks=c(0),labels=c(" ")) +
   scale_y_discrete("",breaks=c(0),labels=c(" ")) +
   theme(plot.margin = unit(c(1,1,1,-3), "lines")) +
   opts

  p
}


# Output
p<-gg.forrest(my.df , "vars" , "est" , "ci.l" , "ci.u") 
p.eff<-gg.forest.text(my.df, "vars", "effect")

p.out<-arrangeGrob(p,p.eff,ncol=2 , widths=c(2,2/3))
print(p.out)
库(gridExtra)
图书馆(GG2)
#资料

my.df我建议如下:

library(gtable)
a <- ggplotGrob(p)
b <- ggplotGrob(p.eff)
grid.newpage()
grid.draw(gtable:::cbind_gtable(a, b, "first"))
库(gtable)

用户20650通常你会标记它以引起版主的注意(版主可以看到),而不是发表评论并希望有人注意到(你通过点击帖子下方的“标记”来标记它,这样你就可以写一条关于你想要发生什么的简短消息)。为了提高速度(因为您可能还没有及时赶到现场查看),我已经为您标记了它;我得到的印象是,您还没有意识到如何进行迁移。作者请求迁移。?//可能是重复的,我已经查看了上面的链接,但问题略有不同。在我的示例中,绘图页边距对齐,但我无法使y值在绘图页边距之间对齐。我肯定我很傻,但为什么y值不一样;它们都是相同的离散变量名称在添加线段和线条的第一个绘图中。我不认为这会改变一切…有很多东西需要学习。因此,对齐这些图的一个解决方法是在第二个文本图中添加一个线段和水平线,并将它们涂成白色……它们现在已对齐。再次感谢。您可以使用
geom_blank
expand_limits
是的,这样更干净。您的评论已经回答了问题,再次感谢。