2016-04-03 66 views
0

我需要生成具有不同總面積的正態分佈密度圖(總計爲1)。使用下面的功能,我可以指定拉姆達 - 這給相對面積:在R圖形的「曲線」函數中使用用戶自定義函數

sdnorm <- function(x, mean=0, sd=1, lambda=1){lambda*dnorm(x, mean=mean, sd=sd)} 

然後我想繪製了使用不同的參數的功能。使用GGPLOT2,此代碼的工作:

require(ggplot2) 
qplot(x, geom="blank") + stat_function(fun=sdnorm,args=list(mean=8,sd=2,lambda=0.7)) + 
    stat_function(fun=sdnorm,args=list(mean=18,sd=4,lambda=0.30)) 

enter image description here

,但我真的想這樣做的基礎R顯卡,我想我需要使用「曲線」功能。不過,我正努力讓這個工作。

回答

0

如果你看一看爲? curve幫助文件,你會看到的第一個參數可以是不同的東西:

一個函數的名稱,或在通話或表達式寫成x的函數,其將評估爲與x相同長度的對象。

這意味着你可以指定第一個參數無論是作爲函數名或表達式,所以你可以只是做:

curve(sdnorm) 

獲得其默認參數的函數的曲線圖。否則,重新創建GGPLOT2表示你會想這樣做:

curve(sdnorm(x, mean=8,sd=2,lambda=0.7), from = 0, to = 30) 
curve(sdnorm(x, mean=18,sd=4,lambda=0.30), add = TRUE) 

結果:

curve

+0

啊!我現在看到我在做什麼錯了 - 我沒有爲曲線函數指定「from」和「to」參數。默認顯示從0到1.做得好 - 謝謝。 – user2085797

1

你可以在基礎R

x <- seq(0, 50, 1) 
plot(x, sdnorm(x, mean = 8, sd = 2, lambda = 0.7), type = 'l', ylab = 'y') 
lines(x, sdnorm(x, mean = 18, sd = 4, lambda = 0.30)) 

EDIT我加入ylab = 'y'和更新圖片具有y軸重新標記以下。

enter image description here

這應該讓你開始。

+0

幹得好 - 謝謝!我沒有想過首先將x定義爲一個序列,然後獲取值。 – user2085797