如何使用R中定义的函数在一张图上绘制多条曲线?

问题描述

我需要在一张图上绘制几条曲线。我从函数中得到了布朗模拟的轨迹:

brownian <- function(T,N){
  alpha=0
  sigma=1
  
  delta_t=T/N
  
  t=seq(0,T,by=delta_t)
  #x=c(0,alpha*delta_t+sigma*sqrt(delta_t)*rnorm(N,mean=0,sd=1))
  x=c(0,alpha*delta_t+sqrt(delta_t)*rnorm(N,sd=1))
  Xt=cumsum(x)
  plot(t,Xt,type='l',col = rep(1:3,each = 10),xlab="t=[0,T]",ylab = "B(t,ω)")
}

例如对于 brownian(1,1000) 我得到:

对于 brownian(10,1000) 我得到:

如您所见,我得到了黑色图表。我必须在一张图上绘制这些轨迹(每个轨迹应该有不同的颜色)。当它需要几个轨迹时,它应该看起来像:

你有什么建议我如何在一张图上绘制这些曲线并且每条曲线都有不同的颜色?

提前致谢

解决方法

您可以通过修改函数并使用 ggplot() 制作图形来轻松完成此操作。下面的函数将 ntimes 作为参数,指定您想要进行模拟的次数。然后它使用 ggplot() 来制作图形。如果您愿意,您可以调整函数的内部结构以使其产生不同的外观。

brownian <- function(T,N,ntimes){
  if((length(N) != length(T)) & length(N) != 1){
    stop("N has to be either length of T or 1\n")
  }
  alpha=0
  sigma=1
  if(length(N) == 1 & length(T) > 1)N <- rep(N,length(T))
  dat <- NULL
  for(i in 1:ntimes){
    delta_t=T/N  
    t=seq(0,T,by=delta_t)
    #x=c(0,alpha*delta_t+sigma*sqrt(delta_t)*rnorm(N,mean=0,sd=1))
    x=c(0,alpha*delta_t+sqrt(delta_t)*rnorm(N,sd=1))
    Xt=cumsum(x)
    dat <- rbind(dat,data.frame(xt=Xt,t=t,n=i))
  }
  require(ggplot2)
  ggplot(dat,aes(x=t,y=xt,colour=as.factor(n))) + 
    geom_line(show.legend=FALSE) + 
    labs(x="t=[0,T]",y = "B(t,ω)",colour="T") + 
    theme_classic()
}
brownian(10,1000,5)

enter image description here

,

这是带有 matplot 的基本 R 解决方案。它非常适合这种类型的绘图,因为它计算 x 和 y 轴范围并仅在一次调用中绘制所有线条。它使用 DaveArmstrong's 添加额外参数 ntimes 的想法。此参数也用于配色方案。

brownian <- function(T,ntimes){
  alpha <- 0
  sigma <- 1
  delta_t <- T/N
  t <- seq(0,by = delta_t)
  #x=c(0,sd=1))
  Xt <- replicate(ntimes,cumsum(c(0,mean = 0,sd = 1)))
  )
  matplot(t,Xt,type = "l",lty = 1,col = seq_len(ntimes),xlab = "t=[0,ylab = "B(t,ω)")
}

set.seed(2020)
brownian(1,5)

enter image description here