2016-08-30 89 views
2

我希望的一般解決方案是能夠獨立指定每個面的任意軸限制。爲ggplot2中的每個面設置不同的軸限制,不使用scales =「free」

基本功能是通過將秤設置爲空閒來獲得的。例如:

ggplot(diamonds, aes(x = carat, y = price)) + geom_point() + facet_wrap(~clarity, nrow = 4, ncol = 2, scales = "free")

這實際上是一個非常不錯的功能,但在實踐中並不總是那麼有用。通常我們想要的是在同一軸上有可比較的變量子組。作爲一個玩具的例子,考慮一下上面的鑽石盒。我們可能希望第一列的所有方面具有相同的軸限制,而第二列中的所有方面都具有相同的軸限制(但與第一列不同)。

是否有解決方案,用標準 ggplot使用完成此操作。

+2

我不知道任何(不存在大量的手工電網代碼修修補補的),但在這裏是一些[相關](http://stackoverflow.com/q/18046051/324364)[閱讀](https://github.com/hadley/ggplot2/issues/187)。 – joran

+0

沒有標準的解決方案。我可能會分別製作兩列,並使用'cowplot'將它們粘在一起。 – Axeman

+0

在我看來,這可以像'labeller'一樣進行編程。具有逐列操作的請求與'.rows'和'.cols'邊距規格類似。投票結束,因爲真正的功能要求和SO不是那些正確的地方。 –

回答

3

在此結束之前,我認爲擴展@Axeman的建議非常重要:直接使用facet_wrap可能無法實現,但可以通過分組所需的組並將其與cowplot拼接在一起來實現。在這裏,我分爲「低」和「高」質量,但分組是任意的,可以是任何你想要的。可能要與風格有點亂,但是從cowplot默認是可以接受的用於此目的:

library(cowplot) 

lowQ <- 
    ggplot(diamonds %>% 
      filter(as.numeric(clarity) <= 4) 
     , aes(x = carat 
       , y = price)) + 
    geom_point() + 
    facet_wrap(~clarity 
      , nrow = 1) 


hiQ <- 
    ggplot(diamonds %>% 
      filter(as.numeric(clarity) > 4) 
     , aes(x = carat 
       , y = price)) + 
    geom_point() + 
    facet_wrap(~clarity 
      , nrow = 1) 

plot_grid(lowQ, hiQ, nrow = 2) 

enter image description here

相關問題