我有一个主图和一些辅助信息,我想在它下面的另一个图中面对.Facetting工作得很好,除了我不知道如何控制一个方面与另一个方面使用的相对空间.我知道space ='free'但这仅在范围对应于所需的相对大小时才有用.
因此,例如,我可能想要一个图表,其中第一个方面占80%,第二个占20%.这是一个例子:
data <- rbind(
data.frame(x=1:500, y=rnorm(500,sd=1), type='A'),
data.frame(x=1:500, y=rnorm(500,sd=5), type='B'))
ggplot() +
geom_line(aes(x=x, y=y, colour=type), data=data) +
facet_grid(type ~ ., scale='free_y')
Run Code Online (Sandbox Code Playgroud)
以上创建了两个相等垂直维度的方面.加入在space='free'在facet_grid函数改变这样的尺寸使得下小面比上大致5倍的情况下(如预期).
假设我希望鞋面大小为2x,具有相同的数据集和facet的排序.我怎么能做到这一点?
是在重新调整数据设置一些挂羊头卖狗肉做到这一点的唯一方法和手动覆盖轴标签(如果有的话,怎么样)?
替代
如下所示,可以使用视口渲染为多个图形.我考虑过这个,实际上过去使用这种方法实现了标准的绘图和视口.
问题是很难让x轴与这种方法保持一致.因此,如果有办法修复 y轴标签区域的大小和图例区域的大小,则可以生成2个具有相同渲染区域的图形.
您不需要使用facet - 您也可以使用该viewport功能执行此操作.
> ratio = 1/3
> v1 = viewport(width=1,height=ratio,y=1-ratio/2)
> v2 = viewport(width=1,height=1-ratio,y=(1-ratio)/2)
> print(qplot(1:10,11:20,geom="point"),vp=v1)
> print(qplot(1:10,11:20,geom="line"),vp=v2)
Run Code Online (Sandbox Code Playgroud)
比率是顶部面板与整个页面的比例.尝试2/3和4/5.
如果两个图中的图例或轴标签大小不同,align.plots这种方法会变得很难看,但是对于修复,请参阅ggExtra包中的函数和ggplot2作者Hadley Wickam 关于这个主题的注释.

目前没有简单的方法来处理facet,尽管如果你准备好编辑Grid,你可以在绘制ggplot图之后修改ggplot图以获得此效果.
另请参阅有关使用grid和ggplot2使用R创建连接图的问题.
Kohske Takahashi 在facet_grid 上发布了一个补丁,允许指定facet 的相对大小。请参阅线程:
http://groups.google.com/group/ggplot2/browse_thread/thread/7c5454dcc04bc7b8
幸运的是,我们将在 ggplot2 的未来版本中看到这一点。