2016-04-03 14 views
0

合計面積の異なる正規分布密度プロットを作成する必要があります(合計は1)。次の関数を使用して、私はラムダ指定することができます - 相対面積を与える:Rグラフィックスの "curve"関数内のユーザー定義関数を使用する

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

私はその後、別のパラメータを使用して関数をプロットしたいです。

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グラフィック、でこれをしたい:ggplot2を使用して、このコードは動作します。しかし、私はこれを動作させるのに苦労しています。

答えて

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

ああ!私は今私が間違っていることを見ています - 私は曲線関数の "から"と "の"引数を指定していませんでした。デフォルトの表示は0から1です。 – user2085797

1

あなたは、私がylab = 'y'を追加し、y軸の再ラベルを持っている画像を更新し

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ベースRに次の操作を行うことができます。

enter image description here

これは、あなたが始める必要があります。

+0

よくやった - ありがとう!最初にxをシーケンスとして定義してから値を取得することは考えていませんでした。 – user2085797