【问题标题】:Specifying ggplot2 panel width指定 ggplot2 面板宽度
【发布时间】:2011-03-30 16:33:49
【问题描述】:

我在同一页面上有两个 ggplots,我希望它们的面板具有相同的宽度。

一些样本数据:

dfr1 <- data.frame(
  time = 1:10,
  value = runif(10)  
)

dfr2 <- data.frame(
  time = 1:10,
  value = runif(10, 1000, 1001)  
)

一个地块在另一个地块之下:

p1 <- ggplot(dfr1, aes(time, value)) + geom_line()
p2 <- ggplot(dfr2, aes(time, value)) + geom_line()

grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 1)))   
print(p1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))         
print(p2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1))

如何指定每个图中的面板宽度和位置,以使它们对齐?

(我不想将绘图与分面结合;这在我的真实示例中不合适。)

【问题讨论】:

标签: r ggplot2 r-grid


【解决方案1】:

原解决方案:

 #   install.packages("ggExtra", repos="http://R-Forge.R-project.org")
 #   library(ggExtra)
 #   align.plots(p1, p2)

编辑(22/03/13):

由于 ggExtra 已经不存在了(而且 ggplot2 的许多内部结构都发生了变化),所以最好使用 gtable 包提供的合并函数(rbind、cbind),

gl = lapply(list(p1,p2), ggplotGrob)     
library(gtable)
g = do.call(rbind, c(gl, size="first"))
g$widths = do.call(unit.pmax, lapply(gl, "[[", "widths"))

grid.newpage()
grid.draw(g)    

【讨论】:

  • 刚刚意识到您在上一个问题中向我提到了align.plotsstackoverflow.com/questions/5409776/…我保证这次我会记住的!
  • 确实,这个包已经退役了
  • @baptiste 感谢您的编辑。您确定不想将此作为新答案发布吗?
  • 我最初发布了一个包含完整代码的答案,但无论如何你都需要编辑。这样就好了(至少现在,直到代码再次中断......)
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 2019-04-28
  • 2018-03-26
  • 2019-01-15
  • 2018-04-04
相关资源
最近更新 更多