0

我正在 R 包 NDTV 中创建一个不断变化的社交网络的动画。我有一个顶点列表,我想在动画的短时间内组合在一起。做这个的最好方式是什么?

我追求了三种不同的途径,但都失败了。任何建议,将不胜感激。

1)我尝试使用称为“组”的顶点属性,理解这将使我能够将顶点与组相关联。使用ndtv 工作室中的“轮子”动画作为我的起点,我尝试部署以下代码:

activate.vertex.attribute(wheel,'group','2',onset=6,terminus=8,v=1) render.animation(wheel,vertex.group='group',verbose=FALSE)

但这带来了错误消息:“组不是图形参数。”

这令人费解,因为当我运行时list.vertex.attributes(wheel)group.active被列为属性。 Color.active也被列为属性,我可以使用上述方法更改顶点的颜色。为什么程序能识别一个属性而不能识别另一个属性?

2)我还尝试上传一个由 x 坐标和 y 坐标组成的 csv 文件,希望我可以用它来指示顶点的位置。我能够上传 csv 文件并使用新坐标创建一个静态图,但我无法将新坐标合并到该图的变化动画中。这是我使用的数据和代码(同样,此代码是在初始化网络后部署的,如 ndtv 研讨会中所述)

df<-read.csv(file="coords.csv",header=F,sep=",") plot(wheelAt8,coords=df)

这会生成一个反映上传坐标的静态图,但动画本身不会改变。

3)因为我无法让上述工作,我现在正在尝试修改network.layout.animate.useAttribute(net, dist.mat = NULL, default.dist = NULL,seed.coords = NULL, layout.par = list(x = "x", y = "y"), verbose = TRUE)这个项目。
我不确定从哪里开始,因为我不确定如何将坐标值放入“x”。

感谢您的时间。

4

1 回答 1

1

包尝试根据ndtv沿边的距离定位顶点,因此简单地添加名为 group 的属性将无法完成此操作。您需要修改网络的结构(激活和停用“组”中的顶点之间的边)或完全覆盖动画过程,并准确告诉它您想要绘制顶点的位置(尝试#2 的尝试)

在您的示例render.animation(wheel,vertex.group='group',verbose=FALSE)中将不起作用,因为没有名为的绘图参数vertex.group。如果你想按组为顶点着色,你会做类似的事情

render.animation(wheel,vertex.col='vertex.group')

它告诉它使用“vertex.group”属性作为顶点颜色

在尝试 #2 中,您只提供一组静态坐标,所以我假设您希望顶点保持在固定位置并且只是动画领带变化?为此,您需要将坐标作为名为“x”和“y”的属性附加到网络。然后,由于您想使用非默认的网络布局算法,您需要在调用compute.animation之前调用并告诉它要使用的布局render.animation

library(ndtv)

# the 'wheel' example network
wheel <- network.initialize(10)
add.edges.active(wheel,tail=1:9,head=c(2:9,1),onset=1:9, terminus=11)
add.edges.active(wheel,tail=10,head=c(1:9),onset=10, terminus=12)

# your coordinate amtrix
df<-matrix(c(-0.99603723, 2.798261858,
             -0.10480299, 1.754082668,
             0.64294818, 0.679889124,
             1.19137571, 0.042572219,
             1.47703967, 0.250050715,
             1.49393321, 1.523045819,
             1.2319355, 3.772612788,
             0.72715205, 6.634426198,
             0.01328487, 9.529656458,
             -1.49393321, 0.662555779),ncol=2,byrow=TRUE)

# attach your *static* coordinates to the network
set.vertex.attribute(wheel,'x',df[,1])
set.vertex.attribute(wheel,'y',df[,2])

# compute the animation with the 'useAttribute' layout (which will look for x and y attributes)
compute.animation(wheel,animation.mode = 'useAttribute')
# render it
render.animation(wheel)
于 2015-09-28T20:07:20.823 回答