如何在保持布局固定的同时为不断增长的图形设置动画?

时间:2014-03-20 19:58:50

标签: r igraph

我正在使用igraphanimation包制作动画。我希望通过一次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")

这绘制为:

enter image description here

我想(不要担心线宽权重):

enter image description here

因此动画序列将是这样的(每个帧都包含所有演员):

enter image description here

如果我可以将分离物c("researcher", "End")添加到上面的igraph中,我可以推广到每个帧。

我认为它可能很简单:

V(g) <- actors

但事实并非如此。

2 个答案:

答案 0 :(得分:4)

我用来实现这一目的的技巧是预渲染布局,并将每个节点和边缘预先格式化为不可见,直到它们的时间到来。

  1. 渲染完整图形的布局L
  2. 一切都是隐身的(hsv(.36,1,1,alpha=0)
    1. 一旦节点/边缘应该显示(hsv(.36,1,1,alpha=1)
    2. ,就会使节点/边缘可见
    3. 绘图(最初计算和常量布局L)并保存为png
  3. 使用ffmpeg
  4. 将所有内容粘在一起

    包含动画的主要文章:

    http://www.joyofdata.de/blog/animated-visualization-of-a-growing-network-of-carpoolings/

    <强>码

    http://www.joyofdata.de/blog/r-code-for-igraph-animation/

答案 1 :(得分:1)

虽然与igraph不直接兼容,但R包networkDynamic具有动态网络的适当表示,然后可以使用ndtv R包将其呈现为电影或导出为HTML5动画。如果你发布带有数据的data.frame(看起来你的例子只有第一个网络?)我可以给你一个例子。