2010-11-17 97 views
5

我有一个主图和一些辅助信息,我想在其下面的另一个图中展示它。除了我不知道如何控制一个方面相对于另一个方面使用的相对空间之外,多面体的工作非常棒。意识到空间='空闲',但只有当范围对应于所需的相对大小时才有用。调整小平面的相对空间(不考虑坐标空间)

因此,例如,我可能需要一个图表,其中第一面占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') 

上面创建了两个垂直尺寸相同的方面。在facet_grid函数中加入space='free'会改变尺寸,使得下方小面大约比上方大5倍(如预期的那样)。

假设我希望鞋帮是2倍大,具有相同的数据集和方面排序。我怎样才能做到这一点?

是否需要在重新缩放数据集和手动覆盖轴标签时使用一些技巧来做到这一点(如果是这样,如何)?

替代

如下文所述可以使用视口中呈现为多个图。我曾考虑过这一点,实际上在过去使用这种方法实现了标准绘图和视口。

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

+0

我应该指出,但我需要X轴准确对齐。在单独的图表中渲染是可以考虑的,但是如果要使x轴对齐非常困难,则工作起来并不容易。在时间序列中查看重合的指标时,这很重要。 – 2010-11-17 16:38:30

回答

7

您不需要为此使用方面 - 您也可以通过使用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包和GGPLOT2作者哈德利Wickam的notes on this very topicalign.plots功能。

alt text


有没有简单的方法与当前方面要做到这一点,但如果你准备下井editing the Grid,您可以在已绘制得到这个效果后修改ggplot图。


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

+0

那些不是真正的'方面',是吗? – Shane 2010-11-17 16:25:15

+0

你无法做到他想要的方面而不去下达网格层面。此外,二手数据可能使用与数据不同的维度,因此在许多情况下它们可能不合适。 – 2010-11-17 16:28:12

+0

“只有在重新调整数据集和手动覆盖轴标签(如果是这样以及如何)时使用一些技巧才能做到这一点?” - 不,这不是唯一的方法来做到这一点:-) – 2010-11-17 16:28:51