Выяснение того, как группы вершин образуются и растворяются со временем в NDTV

Я создаю анимацию изменяющейся социальной сети в R-пакете NDTV. У меня есть список вершин, которые я хотел бы сгруппировать во время короткого периода анимации. Каков наилучший способ сделать это?

Я преследовал три разных пути, но потерпел неудачу во всех. Мы ценим любые предложения.

1) Я попытался использовать атрибут вершины под названием "группа", при том понимании, что это позволит мне связать вершину с группой. Используя анимацию "wheel" в мастерской 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) Я также попытался загрузить CSV-файл, состоящий из координат x и y, в надежде, что я смогу использовать это для определения положения вершин. Мне удалось загрузить файл 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) для этого проекта.
Я не уверен, с чего начать, потому что я не уверен, как поместить значения координат в "х".

Спасибо за ваше время.

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)
Другие вопросы по тегам