调整ggplot2中facet-grid/facet_wrap中面板的相对空间

FXQ*_*der 6 r facet ggplot2

有没有办法改变一个facet_grid或多个方面的y轴的高度/长度facet_wrap

例如,

library(ggplot2)
ggplot(economics_long[economics_long$variable %in% c("pop", "uempmed"),], aes(date, value)) +
    geom_line() +
    facet_grid(variable~., scales = "free_y") +
    theme(strip.background = element_blank())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在上面的图中,我希望弹出时间序列y轴高度/长度是,例如,两倍于uempmed y轴长度(2:1),无论两个时间序列有不同的y轴比例.

就像Kohske在这里所做的那样,在ggplot2的旧版本中,它在ggplot> = 2.0.0中不起作用:

https://kohske.wordpress.com/2010/12/25/adjusting-the-relative-space-of-a-facet-grid/

我知道我可以指定参数space = "free"facet_grid,但我不认为这样的说法可以用来设定的2:1 y轴比例是多少?

我也不想使用"grid.arrange类型"解决方案来排列单独创建的ggplots(我可以在其中制作具有不同y轴长度的2个单独的图),因为我理想地想要利用Shiny的交互式ggplot2功能在这一个单独的facet_wrap情节中(例如,带有画笔的交互式闪亮方面示例位于页面的下半部分:http://shiny.rstudio.com/articles/selecting-rows-of-data.html).

MrG*_*ble 6

有多种选择。

使用facets,您可以facet_grid(..., space='free_y')将每行的高度调整为 y 刻度的长度。然而,在您的数据集中,底行最小化为一行(0-25 与 200,000 - 320,000)。

当绘制/打印 ggplot2 对象时,它们首先被转换为gtable对象。将绘图保存为p,我们可以调用ggplotGrob以获取 gtable 对象。这是一个单向过程;转换后,您无法将 gtable 转换回 ggplot2 对象!

(g <- ggplotGrob(p))
TableGrob (12 x 8) "layout": 18 grobs
    z         cells       name                                    grob
1   0 ( 1-12, 1- 8) background        rect[plot.background..rect.3766]
2   1 ( 6- 6, 4- 4)  panel-1-1               gTree[panel-1.gTree.3696]
3   1 ( 8- 8, 4- 4)  panel-1-2               gTree[panel-2.gTree.3711]
4   3 ( 5- 5, 4- 4)   axis-t-1                          zeroGrob[NULL]
5   3 ( 9- 9, 4- 4)   axis-b-1    absoluteGrob[GRID.absoluteGrob.3725]
6   3 ( 6- 6, 3- 3)   axis-l-1    absoluteGrob[GRID.absoluteGrob.3733]
7   3 ( 8- 8, 3- 3)   axis-l-2    absoluteGrob[GRID.absoluteGrob.3741]
8   3 ( 6- 6, 6- 6)   axis-r-1                          zeroGrob[NULL]
9   3 ( 8- 8, 6- 6)   axis-r-2                          zeroGrob[NULL]
10  2 ( 6- 6, 5- 5)  strip-r-1                           gtable[strip]
11  2 ( 8- 8, 5- 5)  strip-r-2                           gtable[strip]
12  4 ( 4- 4, 4- 4)     xlab-t                          zeroGrob[NULL]
13  5 (10-10, 4- 4)     xlab-b titleGrob[axis.title.x..titleGrob.3714]
14  6 ( 6- 8, 2- 2)     ylab-l titleGrob[axis.title.y..titleGrob.3717]
15  7 ( 6- 8, 7- 7)     ylab-r                          zeroGrob[NULL]
16  8 ( 3- 3, 4- 4)   subtitle  zeroGrob[plot.subtitle..zeroGrob.3763]
17  9 ( 2- 2, 4- 4)      title     zeroGrob[plot.title..zeroGrob.3762]
18 10 (11-11, 4- 4)    caption   zeroGrob[plot.caption..zeroGrob.3764]
Run Code Online (Sandbox Code Playgroud)

所有元素都设置在网格状布局中。布局中每行的高度由下式给出g$heights

> g$heights
 [1] 5pt                 0cm                 0cm                 0cm                 0cm                 1null               5pt                 1null               0.396281911581569cm 1grobheight        
[11] 0cm                 5pt    
Run Code Online (Sandbox Code Playgroud)

将“panel-1-1”和“panel-1-2”的坐标与这些高度相匹配,您会发现第 6 个和第 8 个元素都是1null。您可以将它们更改为任何单位,cm,in,pt,...这1null只是其他元素之后剩下的,并在它们之间划分。所以我们可以将第6个高度更改为2null(注意使用双括号):

> g$heights[[6]] <- unit(2, 'null')
> grid.draw(g)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述