2010-11-17 47 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

相關問題