我有一个主要图表和一些辅助信息,我想在其下面的另一个图表中进行分析。 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个图形。
答案 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。
目前没有简单的方法可以使用构面进行此操作,但如果您准备进入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的未来版本中看到这一点。