ggplot2绘图函数有几个参数

van*_*eri 1 plot r ggplot2

我有这个功能.

change <- function(score, d, k, p) {k*(score - 1/(1+k^(d/p)))}
Run Code Online (Sandbox Code Playgroud)

我想在一个单独的图中绘制一系列参数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])
}
Run Code Online (Sandbox Code Playgroud)

但是我认为这在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
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 5

我会在外面这样做ggplot2.我认为期望ggplot在两个不同的参数上进行矢量化可能太过分了......

这是tidyverse,但也很容易完成apply.

 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()
Run Code Online (Sandbox Code Playgroud)

我只做了p0到100(而不是0到1000),因为100万个点是ggplot的一个相当大的数据集.(你真的需要看到1000个独立的价值观吗?也许seq(0,1000,length=100)吧?