我正在使用igraph
和animation
包制作动画。我希望通过一次data.frame 1行动画来观察边缘的变化。我创建了一个igraph对象列表,并希望确保所有社交演员都有代表,即使他们的行还没有出现。他们会成为孤立的,直到后来的动画。
如何将actor作为隔离添加到igraph对象中。我使用layout.circle
并希望让演员保持一致的位置。
我将从数据(igraph对象)开始,然后用一些视觉效果来展示我想要的东西。
g <- structure(list(4, TRUE, c(0, 1, 2, 0), c(1, 2, 0, 3), c(0, 3,
1, 2), c(2, 0, 1, 3), c(0, 2, 3, 4, 4), c(0, 1, 2, 3, 4), list(
c(1, 0, 1), structure(list(), .Names = character(0)), structure(list(
name = c("greg", "teacher", "sam", "sally"), size = c(10,
10, 10, 10)), .Names = c("name", "size")), structure(list(
wc = c(5L, 4L, 10L, 5L), id = 2:5, prop_wc = c(0.208333333333333,
0.166666666666667, 0.416666666666667, 0.208333333333333
), color = c("grey50", "grey50", "grey50", "grey50"),
width = c(3.125, 2.5, 6.25, 3.125)), .Names = c("wc",
"id", "prop_wc", "color", "width")))), class = "igraph")
library(igraph)
plot(g, layout=layout.circle)
## vector of actors to include in this order
## in the igraph object there is no "researcher" or "End" actor
actors <- c("greg", "teacher", "sam", "sally", "researcher", "End")
这绘制为:
我想(不要担心线宽权重):
因此动画序列将是这样的(每个帧都包含所有演员):
如果我可以将分离物c("researcher", "End")
添加到上面的igraph中,我可以推广到每个帧。
我认为它可能很简单:
V(g) <- actors
但事实并非如此。
答案 0 :(得分:4)
我用来实现这一目的的技巧是预渲染布局,并将每个节点和边缘预先格式化为不可见,直到它们的时间到来。
hsv(.36,1,1,alpha=0)
)hsv(.36,1,1,alpha=1)
)包含动画的主要文章:
http://www.joyofdata.de/blog/animated-visualization-of-a-growing-network-of-carpoolings/
<强>码强>
答案 1 :(得分:1)
虽然与igraph
不直接兼容,但R包networkDynamic
具有动态网络的适当表示,然后可以使用ndtv
R包将其呈现为电影或导出为HTML5动画。如果你发布带有数据的data.frame(看起来你的例子只有第一个网络?)我可以给你一个例子。