有没有办法在facet_grid
或facet_wrap
中更改单个构面的y轴高度/长度?
例如,
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())
在上面的图中,我希望弹出时间序列y轴高度/长度是,例如,两倍于未放大的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)。
答案 0 :(得分:2)
有多种选择。
使用facets
,您可以使用facet_grid(..., space='free_y')
将每行的高度调整为y-scale的长度。但是,在您的数据集中,底行最小化为一行(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]
所有元素都以网格状布局设置。布局中每行的高度由g$heights
:
> g$heights
[1] 5pt 0cm 0cm 0cm 0cm 1null 5pt 1null 0.396281911581569cm 1grobheight
[11] 0cm 5pt
将'panel-1-1'和'panel-1-2'的坐标与这些高度相匹配,你会发现第6和第8个元素都是1null
。您可以将它们更改为任何单位,cm,in,pt,...... 1null
就是在其他元素之后留下的内容,并将它们分开。所以我们可以将第6个高度更改为2null
(注意使用双括号):
> g$heights[[6]] <- unit(2, 'null')
> grid.draw(g)