如何水平对齐图(ggplot2)?

时间:2015-03-23 14:04:01

标签: r plot ggplot2 alignment gridextra

Hello R和ggplot2社区!

我想水平对齐两个用ggplot2生成的图。一个有两个方面(和小面条!)和传奇,但第二个没有。它们共享相同的Y轴,我想对齐它们。我可以使用它们的凹槽宽度垂直对齐绘图,但我无法用高度来计算它。

这是支持我的问题的一段代码。

library( ggplot2 )
library( gridExtra )

plot_1 <- ggplot() +
  geom_point(
    data = iris,
    aes(
      x = Petal.Length,
      y = Petal.Width,
      colour = Sepal.Length 
      ) 
    ) +
  facet_grid(
    . ~ Species 
    ) +
  theme(
    legend.position = "bottom"
    )

plot_2 <- ggplot() +
  geom_point(
    data = iris,
    aes(
      x = Sepal.Width,
      y = Petal.Width
      )
    )

g1 <- ggplotGrob( plot_1 )
g2 <- ggplotGrob( plot_2 )

# Here, how to manipulate grobs to get plot_2 scaled to the plot_1's Y axis? (ie, with an empty area right of the plot_1's legend)

grid.arrange( g1, g2, ncol = 2 )

你知道如何在grid.arrange()之前操纵grobs的高度吗? (欢迎任何其他建议!) 另外,如何将总面积的三分之二分配到plot_1

另请注意,我的真实情节实际上是coord_flip(),但我认为它与此问题无关。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案是创建一个空白面板:

blank<-grid.rect(gp=gpar(col="white"))

然后使用grid.arrange创建一个双列网格,其中第二列实际上由三行组成。

grid.arrange(g1, arrangeGrob(blank,g2,blank,ncol=1,
heights=c(0.2,0.9,0.2)),ncol=2) 

使用heights参数可以为我们提供所需的结果。

关于您的其他问题,heights的{​​{1}}和widths参数应该在那里非常有用。