我目前正在进行如下模拟:
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;。然后,我想将每个生成的图形添加到单个图中,以便我可以比较每次运行的差异。我该怎么做呢?
答案 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循环,并尝试至少避免使用()。