2010-11-25 19 views
24

某些樣本數據:您如何爲不同方面設置不同的比例限制?

dfr <- data.frame(
    x = rep.int(1:10, 2), 
    y = runif(20), 
    g = factor(rep(letters[1:2], each = 10)) 
) 

一個簡單的散點圖有兩個方面:

p <- ggplot(dfr, aes(x, y)) + 
    geom_point() + 
    facet_wrap(~ g, scales = "free_y") 

我可以爲所有面板軸界限與

p + scale_y_continuous(limits = c(0.2, 0.8)) 

(或用於此的包裝像ylim

但我該如何設置di不同面的不同軸限制?

的latticey的方式做這將是一個列表傳遞給這樣的說法,例如,

p + scale_y_continuous(limits = list(c(0.2, 0.8), c(0, 0.5))) 

不幸的是,僅僅罰全中GGPLOT2情況下的錯誤。

編輯:

這裏的一個局部的黑客行爲。如果您想擴展縮放範圍,那麼您可以在指定限制的數據集中添加列,然後使用geom_blank來繪製它們。

修改數據集:

dfr <- data.frame(
    x = rep.int(1:10, 2), 
    y = runif(20), 
    g = factor(rep(letters[1:2], each = 10)), 
    ymin = rep(c(-0.6, 0.3), each = 10), 
    ymax = rep(c(1.8, 0.5), each = 10) 
) 

更新的情節:

p + geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) 

現在的規模是不同的,左手是正確的。不幸的是,由於需要爲積分留出空間,所以右手的比例不會縮小。

如果有幫助,我們現在可以將這個問題改爲「是否可以在沒有重新計算秤的情況下繪製點並且沒有明確地調用scale_y_continuous

回答

5

我不認爲這是可能的,但在ggplot2。 1月份的discussion表明這個問題正在考慮之中。

+0

感謝您的鏈接。雖然不是我希望的答案。 – 2010-11-25 13:24:33

0

要收縮左側圖表上的比例,請刪除超出範圍的點。例如。這將在右圖Y比例降低到值0和0.5之間:

p <- ggplot(dfr, aes(x, y)) + 
    geom_point(subset=.(g == "a" | (y > 0 & y <.5))) + 
    geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) + 
    facet_wrap(~ g, scales = "free_y") 

另見我回答這個question

相關問題