2015-09-27 6 views
0

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

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

1) Я попытался использовать атрибут вершины, называемый «группа», при том понимании, что это позволит мне связать вершину с группой. Использование «колеса» анимации в ndtv workshop как моя отправная точка, я попытался использовать следующий код:

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 и создать статический график с новыми координатами, но я не смог включить новые координаты в изменяющуюся анимацию этого сюжета. Вот код data и я (опять же, этот код был развернут после инициализации сети, как описано в мастерской 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».

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

+0

Это не ясно из названия именно то, что вы пытаетесь достичь – skyebend

ответ

1

Пакет ndtv пытается расположить вершины в соответствии с расстояниями вдоль их краев, поэтому простое добавление атрибута с именем group не будет выполнено. Вам нужно будет либо изменить структуру сети (активировать и деактивировать края между вершинами в вашей группе), либо полностью переопределить процесс анимации, а просто указать точно, где вы хотите нарисовать вершины (что вы пытаетесь сделать в попытке № 2)

В вашем примере render.animation(wheel,vertex.group='group',verbose=FALSE) не будет работать, потому что нет параметра plot с именем 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) 
+0

Спасибо за возвращение ко мне, и извинения за путаницы в том, как я сформулированного мою просьбу. Чтобы уточнить, чего я хочу достичь, я создал анимацию [здесь] (http://www.archivalscience.ca/communities.gif). Примечание: анимация начинается через пять секунд. Также обратите внимание: он работает только в Chrome. Проблема, которую я нахожу, состоит в том, что сообщества вершин (определенные с использованием алгоритма быстрого жадного алгоритма) не расположены вместе в окне отображения R при запуске анимации с использованием NDTV. Если у вас есть время, можете ли вы сказать мне, возможно ли то, что я хочу достичь? – oymonk

+0

Это похоже на слишком общий вопрос для SO, лучше опубликованный (с примерами данных) в statnet help listserv https://mailman13.u.washington.edu/mailman/listinfo/statnet_help – skyebend

+0

Переадресация очень ценится - спасибо. – oymonk

 Смежные вопросы

  • Нет связанных вопросов^_^