使用grid.arrange()对齐两个图

时间:2017-03-02 22:15:18

标签: r ggplot2

我使用此代码创建了以下图:

library(ggplot2)
library(grid)
library(gridExtra)

x.test<-c(0,2,4,6,8,12,16,20,24)
y=c(1,2,3,4,5,6,7,8,9)
y.test=c(1,2,3,4,5,6,7,8,9)

testdf<-data.frame(x.test,y.test) 


heat.time<-x.test
heat.val<-c(0.2,0.4,0.6,0.8,0.9,0.9,0.9,0.9,0.9)
testdf2<-data.frame(heat.time,heat.val)
plot1<-ggplot(testdf,aes(x.test,y.test))+geom_line()+
  scale_x_continuous(limits=c(0,26),breaks=c(0,2,4, 6, 8, 12,16,20,24))
plot2<-ggplot(testdf2,aes(heat.time,""))+
  geom_tile(data=testdf2,aes(fill=heat.val),height=1, width=0.7)+   
  scale_fill_gradient(low="lightblue",high="blue") +
  scale_x_continuous(limits=c(-1,26),breaks=c(-1,2,4, 6, 8, 12,16,20,24))+
  theme(
    legend.position = "top",
    axis.line=element_blank(),
    axis.text.x=element_blank(),
    axis.text.y=element_blank(),
    axis.ticks=element_blank(),
    axis.title.x=element_blank(),
    axis.title.y=element_blank(),
    panel.background=element_blank(),
    panel.border=element_blank(),
    panel.grid.major=element_blank(),
    panel.grid.minor=element_blank(),
    plot.background=element_blank(),
    plot.margin=unit(c(0,0,-2,0), "cm")
  )

gA <- ggplotGrob(plot2)
gB <- ggplotGrob(plot1)
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)
grid.arrange(gA, gB, heights=c(0.25,0.75), ncol=1)   

plot

然而,即使两个图具有相同的水平轴刻度,我似乎无法使顶部图上的蓝色条与底部图上的标记刻度对齐。任何人都可以帮助或建议替代方法吗?

sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)

1 个答案:

答案 0 :(得分:3)

似乎问题是由于(a)提供给git-svn的参数对于两个图都不相同而且(b)限制没有在两侧对称地增加空间而引起的

使用scale_x_continuous()并对提供给cowplot的参数进行一些修改后,两个图都可以按预期对齐。

修改了对scale_x_continuous()的调用,

scale_x_continuous()

可以使用

对齐绘图
plot1 <- ggplot(testdf, aes(x.test, y.test)) + geom_line() +
  scale_x_continuous(limits = c(-1, 25), breaks = c(0, 2, 4, 6, 8, 12, 16, 20, 24))
plot2 <- ggplot(testdf2, aes(heat.time, "")) + 
  geom_tile(data = testdf2, aes(fill = heat.val), height = 1, width = 0.7) +
  scale_fill_gradient(low = "lightblue", high = "blue") + 
  scale_x_continuous(limits = c(-1, 25), breaks = c(0, 2, 4, 6, 8, 12, 16, 20, 24)) +
  theme_void() + theme(legend.position = "top")

enter image description here

请注意,cowplot::plot_grid(plot2, plot1, rel_heights=c(0.25, 0.75), ncol = 1, align = "v") 用于theme_void()plot2保持不变。

版本:R plot.margin3.3.2 0.7.0,cowplot 2.2.1,ggplot2 2.2.1