调整小平面的相对空间(不考虑坐标空间)

时间:2010-11-17 15:10:23

标签: r ggplot2

我有一个主要图表和一些辅助信息,我想在其下面的另一个图表中进行分析。 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')

以上创建了两个垂直维度相等的方面。在space='free'函数中添加facet_grid会更改尺寸,使得下方面比上部大约5倍(如预期的那样)。

假设我希望鞋面大小为2x,具有相同的数据集和面的排序。我怎么能做到这一点?

在重新缩放数据集和手动覆盖轴标签(如果是这样,如何)的过程中,唯一的方法是使用一些技巧吗?

替代

如下所示,可以使用视口渲染为多个图形。我考虑过这个,实际上过去使用这种方法实现了标准的绘图和视口。

问题是很难让x轴与这种方法保持一致。因此,如果有办法修复y轴标签区域的大小和图例区域的大小,则可以生成具有相同渲染区域的2个图形。

2 个答案:

答案 0 :(得分:7)

您不需要使用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)

比率是顶部面板与整个页面的比例。尝试2/3和4/5。

如果两个图中的图例或轴标签大小不同,这种方法会变得很难看,但是对于修复,请参阅ggExtra包中的align.plots函数和ggplot2作者Hadley Wickam的notes on this very topic

alt text


目前没有简单的方法可以使用构面进行此操作,但如果您准备进入editing the Grid,则可以在绘制ggplot图之后对其进行修改以获得此效果。


请参阅using grid and ggplot2 to create join plots using R上的这个问题。

答案 1 :(得分:2)

Kohske Takahashi在facet_grid上发布了一个补丁,允许指定facet的相对大小。见线程:

http://groups.google.com/group/ggplot2/browse_thread/thread/7c5454dcc04bc7b8

幸运的是,我们将在ggplot2的未来版本中看到这一点。