r语言 - 如何使用重复模拟生成多个图形,并在同一图上绘制所有图形



>我目前有一个模拟如下:

library(igraph)
library(ggplot2)
count <- 1
BigList <- list()
repeat{
g <- erdos.renyi.game(30, 151 , type = "gnm" , directed = F , loops = F) %>%
  set_vertex_attr("a", value = 0) %>%
  set_vertex_attr("b", value = 0) %>%
  set_vertex_attr("c", value = 0) 
V(g)$c <- sample(c(0, .25, .5, .75, 1), vcount(g), replace = TRUE, prob = c(0.15, 0.15, 0.3, 0.3, 0.1))
time <- 1
smallList <- list()
repeat {
mean <- mean(V(g)$a == 1)

V(g)$b <- sapply(V(g), function(x) { 
        NeighborList = neighbors(g, x) ; 
        ifelse(length(NeighborList) > 0, 
        length(NeighborList[NeighborList$a == 1])/length(NeighborList),0) } )
V(g)$a[V(g)$c <= V(g)$b] <- 1
smallList[[time]] <- mean
mean2 <- mean(V(g)$a == 1)
time <- time + 1
if (mean == mean2) {
break
}
}
BigList[[count]] <- smallList
count <- count + 1
if(count == 51) {
break
}
}

所以,这个模拟运行了 50 次,每次 50 次我都想要一个图表来描述"平均值"随"时间"的变化。然后,我想将每个生成的图形添加到单个图中,以便比较每次运行的差异。我将如何做到这一点?

最简单的方法是不要在循环期间绘制,而是在使用 ggplot 之后绘制。为此,您需要在循环中构造一个 data.frame,其中包含所有具有变量计数的数据。行尝试是以这种方式构建您的 datd 框架

 df <- rbind(df,data.frame(time=time, prop=mean, count = count))

最后做

 ggplot(data=df, aes(x=time, y=prop, group=count, colour = count)) +
       geom_line() + 
       geom_point()

您需要在某处增加计数。如果可以,请使用 for 循环,并尽量避免至少使用 (( 的名称。

最新更新