如何使用重复模拟生成多个图形并在同一图表上绘制所有图形?

时间:2018-01-15 05:13:00

标签: r ggplot2 igraph

我目前正在进行如下模拟:

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次我想要一个描绘变化的图表意味着&#39;超过时间&#39;。然后,我想将每个生成的图形添加到单个图中,以便我可以比较每次运行的差异。我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

最简单的方法是在循环期间不绘图,但在使用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循环,并尝试至少避免使用()。