2014-06-18 70 views
1

我想創建一個用以顯示不同的飽和度和使用下面的代碼的演講及其對採樣動態效果:如何用ggplot2限制stat_function圖的範圍?

max <- 2 
decay <- function(x, k, C) { 
    C * (1 - exp(-k*x)) 
} 
require("ggplot2") 
ggplot(NULL, aes(x=x, colour = C)) + 
    stat_function(data = data.frame(x = 0:max, C = factor(1)), fun = function(x) { decay(x, k=10, C=1e1) }) + 
    stat_function(data = data.frame(x = 0:max, C = factor(2)), fun = function(x) { decay(x, k=10, C=1e2) }) + 
    stat_function(data = data.frame(x = 0:max, C = factor(3)), fun = function(x) { decay(x, k=10, C=1e3) }) + 
    stat_function(data = data.frame(x = 0:max, C = factor(4)), fun = function(x) { decay(x, k=10, C=1e4) }) + 
    stat_function(data = data.frame(x = 0:max, C = factor(5)), fun = function(x) { decay(x, k=10, C=1e5) }) + 
    stat_function(data = data.frame(x = 0:max, C = factor(6)), fun = function(x) { decay(x, k=10, C=1e6) }) + 
    scale_colour_manual(values = c("red", "orange", "yellow", "green", "blue", "violet"), labels = c(1, 2, 3, 4, 5, 6)) + scale_colour_discrete(name=expression(paste(C, " value"))) + 
    ylab(label="count") + ylim(0, 100) 

的目的是表明,高C值情況下,曲線將呈現線性。然而,當我期望它只是在最大值處截斷曲線時,ylim將防止顯示任何曲線,它的值大於ylim的最大值。

我如何獲得所需的行爲?

+1

這不是'xlim'和'ylim'函數的目的嗎? –

回答

3

你已經注意到了限制scale(使用scale_y_continuous(limits=...)) 或限制的座標空間之間的差額(使用coord_cartesian(ylim=...)

當你調用ylim它使用的scale_y_continuous相媲美,並在範圍內沒有下降的觀察

ylimxlim幫助描述本(以及指向coord_cartesian作爲替代)

# here is your example rewritten 
ggplot(data = NULL, aes(x=x,colour=C)) + 
    lapply(1:6, function(y){ 
     stat_function(data = data.frame(x=0:max,C=factor(y)), 
      fun = function(x) decay(x,k=10, C = 10^y))) + 
scale_colour_manual(values = c("red", "orange", "yellow", "green", "blue", "violet"), 
        labels = c(1, 2, 3, 4, 5, 6)) + 
scale_colour_discrete(name=expression(paste(C, " value"))) + 
ylab(label="count") + 
coord_cartesian(ylim = c(0,100)) 
+0

謝謝,它完美地闡明瞭它。額外的代碼縮減是一個很好的接觸。 – kortschak