2017-03-04 5 views
1

私はこの機能を持っています。ggplot2いくつかの引数を持つプロット関数

change <- function(score, d, k, p) {k*(score - 1/(1+k^(d/p)))} 

私は、1つのプロットに、d、pと引数の範囲については、この機能のすべての結果をプロットしたいと思います。ベースrでこれはそうです。

parameters <- c(100:400) 
colorshelf <-rainbow(length(parameters)) #red is low 
for(i in seq_along(parameters)) { 
    print(i) 
    curve(change(score=1, d=x, k=100, p=parameters[i]), from=0, to=500, add=T, col=colorshelf[i]) 
} 

しかし、私はこれがggplot2で可能でなければならないと考えましたが、これを回避することはできません。私は現在これに固執しています。どんな助けもありがとうございます。

ggp <- ggplot(data.frame(Ds=c(0:1000), Ps=c(0:1000)), aes(x=Ds, col=Ps)) + 
    stat_function(fun=change, args=list(score=1, d=Ds, k=100, p=Ps)) 
ggp 

答えて

5

ggplot2の外でこれを実行します。 が2つの異なるパラメータをベクトル化すると期待するのはあまりにも多いかもしれないと思います...

これはちょっとしたことですが、applyでも簡単に行うことができます。 100万点がggplotためのかなり大きなデータセットであるので、私は(1000ではなく、0)0 100からpをした

library(dplyr) 
change <- function(score, d, k, p) {k*(score - 1/(1+k^(d/p)))} 
dd <- expand.grid(d=0:1000,p=0:100) 
dd %>% rowwise %>% 
    mutate(c=change(score=1,d=d,k=100,p=p)) -> 
    dd2 

library(ggplot2) 
ggp <- ggplot(dd2,aes(d,c,col=p,group=p))+ 
      geom_path() 

。 (本当に1000の別々の値が必要ですか?seq(0,1000,length=100)

+0

'mutate(obs = 1:n())%>%group_by(obs)'と 'rowwise() 'の使用に違いはありますか? – Phil

関連する問題