我有这个功能.
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)
我会在外面这样做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)
我只做了p
0到100(而不是0到1000),因为100万个点是ggplot的一个相当大的数据集.(你真的需要看到1000个独立的价值观吗?也许seq(0,1000,length=100)
吧?