2012-02-17 7 views
2

における離散(または不連続)関数のプロット:0と1との間にxのは私がggplot使用してプロットしたい以下の機能、有しggplot2

F(X)= 3/4。 xは2〜3の間で1/4、他は0である。これは私が間違ってやっていることは0を中心とした唯一の水平線でプロットになり、しかし

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) 

私は、次のRコードが出ていますか?

答えて

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

私は、このような問題があると考えました。なぜ私のコードはベクタのために働くのですか? プロット中に、垂直エッジが離散関数から予想されるように完全に垂直ではないことがわかります。それについて私は何ができますか? –

+2

'if'は単一のブール値で動作し、' ifelse'はブール値のベクトルで動作します。同様に、 '&&'は単一のブール値を生成し、 '&'はブール値のベクトルを生成します。私はステップ(または "階段")関数として関数をプロットするために私の答えを編集しました。 –

+0

ありがとう!これはうまく動作します。 –

0

私は、これはswitchが大きな効果を使用、または
ysteps <- c(.75,.25,0)
xsteps <- c(1,2,3)
y <- ysteps[which(x >= xsteps)]

の線に沿って何か、それは正しいですので、これを編集すること自由に感じてくださいすることができどちらか別の場所だと思います - 私の脳は、遅く、私は今すぐRを利用できません。

関連する問題