我有6个函数,这些函数只有轻微变化,我希望在同一个图上绘制曲线:
myfun1=function(x){y=x/(1-0.01*(1-x))}
myfun2=function(x){y=x/(1-0.05*(1-x))}
myfun3=function(x){y=x/(1-0.1*(1-x))}
myfun4=function(x){y=x/(1-0.2*(1-x))}
myfun5=function(x){y=x/(1-0.3*(1-x))}
myfun6=function(x){y=x/(1-0.5*(1-x))}
plot(myfun1, 0, 10, xlim=c(0,10), ylim=c(0,10))
plot(myfun2, 0, 10, xlim=c(0,10), ylim=c(0,10), add=TRUE)
plot(myfun3, 0, 10, xlim=c(0,10), ylim=c(0,10), add=TRUE)
plot(myfun4, 0, 10, xlim=c(0,10), ylim=c(0,10), add=TRUE)
plot(myfun5, 0, 10, xlim=c(0,10), ylim=c(0,10), add=TRUE)
plot(myfun6, 0, 10, xlim=c(0,10), ylim=c(0,10), add=TRUE)
这给了我一张6条曲线的情节。但是,有一种更简单的方法可以做到只有几行吗?唯一改变的是常数0.01,0.05,......等等。
我还想要某种传说来表明哪条曲线是理想的,这种方法可以让我这样做。
由于
答案 0 :(得分:4)
使用返回如下函数的函数:
f <- function(p) return(function(x){y=x/(1-p*(1-x))})
plot(0, xlim=c(0,10), ylim=c(0,10), type = "n")
for (x in c(0.01, 0.05, 0.1, 0.2, 0.3, 0.5))
plot(f(x), from = 0, to = 10, add = TRUE)
答案 1 :(得分:1)
是的,通过创建函数生成器可以大大改善这一点。我还使用ggplot2
而不是基础plot
来实现更好的可视化(完全主观),并根据功能添加图例。
param = list(0.01, 0.05, 0.1, 0.2, 0.3, 0.5)
func_gen = function(u) function(x) x/(1-u*(1-x))
x = seq(0,10,by=0.2)
library(plyr)
library(ggplot2)
df = ldply(param, function(u) data.frame(x=x, y=func_gen(u)(x), variable=as.character(u)))
ggplot(df, aes(x=x, y=y, color=variable)) + geom_point()