2012-02-17 220 views
2

離散(或不連續)函數我有以下功能,即我想使用ggplot繪製:繪製在GGPLOT2

F(X)= 3/4爲0和1之間X; 2至3之間的x爲1/4;和其他地方0。

我想出了下列R-代碼:

eq<-function(x) { 
    if(x>=0 && x<=1) { 
     y<-3/4 
    } else if(x>=2 && x<=3) { 
     y<-1/4 
    } else { 
    y<-0 
    } 
return(y) 
} 

library(ggplot2) 

ggplot(data.frame(x=c(-5,5)), aes(x)) + stat_function(fun=eq) 

然而,這導致了情節只集中在0水平線我做了什麼錯?

回答

5

函數應該是「向量化的」,即 接受一個向量作爲參數。

eq <- function(x) 
    ifelse(x>=0 & x<=1, 3/4, 
    ifelse(x>=2 & x<=3, 1/4, 0)) 
ggplot(data.frame(x=c(-5,5)), aes(x)) + 
    stat_function(fun=eq, geom="step") 
+0

我想這個問題會是這樣的。爲什麼你的代碼適用於矢量,而我的代碼卻不適用? 在繪圖時,我注意到垂直邊緣不像離散函數所期望的那樣完美垂直。我能做些什麼? – 2012-02-17 14:53:08

+2

'if'與單個布爾值一起工作,而'ifelse'與布爾值向量一起工作。同樣,'&&'產生一個布爾值,而'&'產生一個布爾值向量。我編輯了我的答案,將該函數繪製爲一個步驟(或「階梯」)函數。 – 2012-02-17 15:04:14

+0

謝謝!這個工作正常。 – 2012-02-17 15:36:22

0

我覺得這是另外一個地方,無論是switch可以用來很大的影響,或者說沿着
ysteps <- c(.75,.25,0)
xsteps <- c(1,2,3)
y <- ysteps[which(x >= xsteps)]

線請隨時編輯此所以它是正確的 - 我的腦子慢,我現在沒有R可用。