2015-09-27 1 views
0

Je crée une animation d'un réseau social en évolution dans le paquet R NDTV. J'ai une liste de sommets que j'aimerais regrouper pendant une courte période de l'animation. Quelle est la meilleure façon de procéder?Décrire comment les groupes de sommets se forment et se dissolvent au fil du temps dans NDTV

J'ai poursuivi trois voies différentes, mais échoué dans chacun d'eux. Toute suggestion serait appréciée.

1) J'ai essayé d'utiliser un attribut vertex appelé "groupe", étant entendu que cela me permettra d'associer un sommet à un groupe. En utilisant l'animation « roue » en ndtv workshop comme point de départ, je suis tenté de déployer le code suivant:

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

Mais, ce qui porte le message d'erreur: « groupe n'est pas un paramètre graphique. "

Ceci est déroutant parce que quand je cours list.vertex.attributes(wheel), group.active est énuméré comme attribut. Color.active est également répertorié en tant qu'attribut, et je suis capable de changer la couleur des sommets en utilisant la méthode décrite ci-dessus. Pourquoi un attribut est-il reconnu par le programme alors que l'autre ne l'est pas?

2) J'ai aussi essayé de télécharger un fichier csv composé de coordonnées x et de coordonnées y, dans l'espoir que je puisse l'utiliser pour dicter la position des sommets. J'ai été capable de télécharger le fichier csv et de créer un tracé statique avec les nouvelles coordonnées, mais je n'ai pas été capable d'incorporer les nouvelles coordonnées dans l'animation changeante de ce tracé. Voici le data et le code je (encore une fois, ce code a été déployé après l'initialisation du réseau tel que décrit dans l'atelier de NDTV)

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

Il en résulte un graphique statique qui reflète les coordonnées mises en ligne, mais le l'animation elle-même n'est pas modifiée.

3) Parce que je ne pouvais pas obtenir ce qui précède pour travailler, j'essaie maintenant de modifier network.layout.animate.useAttribute(net, dist.mat = NULL, default.dist = NULL,seed.coords = NULL, layout.par = list(x = "x", y = "y"), verbose = TRUE) pour ce projet.
Je ne sais pas par où commencer parce que je ne suis pas sûr de savoir comment mettre les valeurs de coordonnées en "x".

Nous vous remercions de votre temps.

+0

On ne sait pas du titre exactement ce que vous essayez d'accomplir – skyebend

Répondre

1

Le package ndtv tente de positionner les sommets en fonction des distances le long de leurs bords. Par conséquent, l'ajout d'un attribut nommé group ne suffit pas. Vous devez soit modifier la structure du réseau (activer et désactiver les arêtes entre les sommets dans votre 'groupe') soit remplacer complètement le processus d'animation et lui dire exactement où vous voulez dessiner les sommets (ce que vous essayez dans la tentative # 2)

Dans votre exemple, render.animation(wheel,vertex.group='group',verbose=FALSE) ne fonctionnera pas car il n'existe aucun paramètre de tracé nommé vertex.group. Si vous voulez colorer les sommets par groupe, vous feriez quelque chose comme

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

qui lui demande d'utiliser l'attribut « vertex.group » comme la couleur des sommets

Pour tenter # 2, vous fournir seulement un ensemble statique de coordonnées, donc je suppose que vous voulez que les sommets restent dans des positions fixes et animent simplement les changements de liens? Pour ce faire, vous devez attacher vos coordonnées au réseau en tant qu'attributs nommés 'x' et 'y'.Ensuite, puisque vous souhaitez utiliser un algorithme de mise en réseau différent de celui par défaut, vous devez appeler le compute.animation et lui indiquer la disposition à utiliser avant d'appeler 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

Nous vous remercions de revenir à moi, et excuses pour la confusion dans la façon dont je LIBELLEES ma demande. Pour clarifier ce que je veux réaliser, j'ai créé une animation [ici] (http://www.archivalscience.ca/communities.gif). Remarque: l'animation commence après cinq secondes. Notez également: il semble seulement fonctionner dans Chrome. Le problème que je trouve est que les communautés de sommets (déterminées en utilisant l'algorithme glouton rapide) ne sont pas situées ensemble dans la fenêtre d'affichage R quand je cours l'animation en utilisant NDTV. Si vous avez le temps, pouvez-vous me dire si ce que je veux réaliser est encore possible? – oymonk

+0

Cela semble une question trop générale pour SO, mieux posté (avec des exemples de données) à la liste d'aide de statnet help https://mailman13.u.washington.edu/mailman/listinfo/statnet_help – skyebend

+0

La redirection est très appréciée - merci. – oymonk