我得到了这个功能。
change <- function(score, d, k, p) {k*(score - 1/(1+k^(d/p)))}
我想在一个图中绘制此函数针对一系列参数 d 和 p 的所有结果。在 base 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
最佳答案
我会在 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()
我只做了从 0 到 100(而不是 0 到 1000)的 p
,因为 100 万个点对于 ggplot 来说是一个相当大的数据集。 (您真的需要查看 1000 个单独的值吗?也许 seq(0,1000,length=100)
?
关于r - ggplot2 具有多个参数的绘图函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42598375/