ggplot2制作记录不断变化的变量的折线图

ggplot2 making a line graph that records constantly changing variables

我有如下图表和代码:

 library(igraph)
 g <- make_empty_graph (2) %>%
   set_vertex_attr("a", value = 1) %>%
   add_vertices(2, color = 2, "a" = 2) %>%
   add_vertices(2, color = 4, "a" = 3) %>%
   add_edges(c(1,2, 2,1, 1,5, 5,1, 1,4 ,4,1)) %>%
   set_vertex_attr("xyz", value = 3)

 i <- 1

 repeat {
   prev_value <- mean(V(g)$a == 1)
   print(V(g)$a)
   print(mean(V(g)$a == 1))
   print(i)

   V(g)$xyz = sapply(V(g), function(x) {
     NeighborList = neighbors(g, x)
     length(NeighborList[NeighborList$a == 2])
   })
   V(g)$a[V(g)$xyz == 1] = 2


   i <- i + 1

   aa <- mean(V(g)$a == 1)
   if (aa == prev_value) {
     break
   }
 }


 df <- data.frame(time=i, prop=aa)

 library(ggplot2)

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

但是,每当我尝试 运行 时,它都不起作用。理想情况下,我想要一个输出,其中 ggplot2 将绘制一个折线图,该折线图描述了随着时间变量 "i" 的变化,属性 "aa" 值为 1 的节点比例的变化。

我不确定你到底想要什么。但是如果你想描述每次迭代 aa 的差异,那么你可以在 repeat.

中添加 ggplot
repeat {
  prev_value <- mean(V(g)$a == 1)
  print(V(g)$a)
  print(mean(V(g)$a == 1))
  print(i)

  V(g)$xyz = sapply(V(g), function(x) {
    NeighborList = neighbors(g, x)
    length(NeighborList[NeighborList$a == 2])
  })
  V(g)$a[V(g)$xyz == 1] = 2


  i <- i + 1

  aa <- mean(V(g)$a == 1)
  if(i == 1){
  df <- data.frame(time=i, prop=aa)
  print( ggplot(data=df, aes(x=time, y=prop, group=1)) +
           geom_line() + 
           geom_point() )}else{
             df <- rbind(df,data.frame(time=i, prop=aa))
   print( ggplot(data=df, aes(x=time, y=prop, group=1)) +
    geom_line() + 
    geom_point() )}


  if (aa == prev_value) {
    break
  }
}