Вы можете использовать пакет ggraph
, который также можно использовать вместе с gganimate
и хорошо обрабатывать igraph
объекты.
Чтобы это работало, нам нужно указать моменты времени, в которые должны быть активны ребра.Это не очень элегантно сделано путем создания списка начального времени и конечных точек (который представляет собой число строк в исходном наборе данных).
library(tidyr)
library(ggraph)
library(gganimate)
df0 <- net.bg.df
df0$time_frame <- as.numeric(df0$time_frame)
for(i in 1:nrow(df0)){
df0$time_frame[i] <- list(df0$time_frame[i][[1]]:19)
}
df <- unnest(df0, time_frame)
g2 <- graph_from_data_frame(df)
l <- as.data.frame(l) # ggraph only accepts data.frame
colnames(l) <- c("x", "y") # ggraph needs these column names
ggraph(g2, layout = "manual", node.position = l) +
geom_node_point(color = "blue", size =3) +
geom_edge_link0(show.legend = F, width = 1) +
theme_classic() +
theme(axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks.x = element_blank(),
axis.ticks.y = element_blank()) +
transition_states(time_frame) +
ggtitle(paste0("time point: ", "{closest_state}"))
А остальное строит график сети и использует transition_states
- функцию.Вот дополнительные источники .
![appearing edges](https://i.stack.imgur.com/RJO2F.gif)