簡體   English   中英

在R中的一個圖上繪制多條曲線的簡便方法

[英]Concise way to draw multiple curves on one plot in R

我有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等。

我還希望通過某種圖例來說明哪條曲線是哪條曲線,因此理想情況下該方法可以使我做到這一點。

謝謝

使用返回如下函數的函數:

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)

是的,可以通過創建函數生成器來徹底改善這一點。 我還使用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()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM