2015-02-07 8 views
1

У меня есть 6 функций, которые отличаются лишь немного, чья кривая я хочу быть построена на том же графике:Сжатый способ нарисовать несколько кривых на одном графике в R

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, ... и т. Д.

Мне также хотелось бы, чтобы какая-то легенда указывала, какая из кривых это так идеально, способ позволил бы мне это сделать.

Благодаря

ответ

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) 
+0

Благодаря @lukeA. Я попробовал «график (f (x), от = 0, до = 10, add = TRUE, col = c (« желтый »,« зеленый »,« синий »,« фиолетовый »,« красный »,« оранжевый »,) ', чтобы сделать линии разными цветами, но это только делает все строки желтыми. Любые идеи, как сделать их разными цветами? – denby47

+0

Один из способов использования разных цветов:' for (x in cols <- c (0.01, 0.05, 0.1) , 0.2, 0.3, 0.5)) plot (f (x), from = 0, to = 10, add = TRUE, col = which (x == cols)) '. – lukeA

+0

Несколько вызовов' plot (..., add = TRUE) 'довольно уродливо. Предложите использовать один« график », а затем несколько вызовов« кривой »или« строк » –

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() 

enter image description here

Смежные вопросы