2012-12-19 1 views
25

J'essaie de construire des graphiques en utilisant des données arborescentes, où les nœuds se divisent généralement en> 2 arêtes. J'ai essayé différentes dispositions, et je vois que le paramètre layout.reingold.tilford va générer des graphes arborescents avec des données non bifurquées. Cependant, les sorties ne sont pas particulièrement attrayantes. Je préfère utiliser quelque chose comme layout.lgl ou layout.kamada.kawai car ceux-ci produisent plus de structures radiales. Je ne vois pas comment changer les paramètres dans R de telle sorte que ces arbres n'ont pas de bords qui se chevauchent. Est-ce possible? J'ai importé un simple fichier de données au format Pajek, avec 355 nœuds et 354 arêtes. Je en cours d'impression à l'aide:Quelle mise en page devrais-je utiliser pour obtenir des bords sans chevauchement dans igraph?

plot.igraph(g,vertex.size=3,vertex.label=NA,layout=layout.lgl) 

Cela me donne une sortie comme ça, ce qui est agréable, mais il a encore des bords qui se chevauchent. J'ai lu que vous pouvez corriger cela manuellement en utilisant tkplot, ou un autre programme comme cytoscape, mais j'ai un certain nombre de ceux-ci à construire, et la taille d'entre eux rend la correction manuelle un tracas.

Merci beaucoup. Here is an example of the output I get

Répondre

11

layout.reingold.tilford a un paramètre appelé circular. Si vous définissez cette valeur sur TRUE, vous convertissez la disposition finale en une disposition radiale en traitant la coordonnée X comme l'angle (après redimensionnement approprié) et la coordonnée Y comme rayon. Ironie du sort, cela ne garantit pas qu'il n'y aura pas de points de passage de bord à la fin, mais il fonctionne très bien si vos sous-arbres ne sont pas excessivement large par rapport au reste du graphique:

> g <- barabasi.game(100, directed=F) 
> layout <- layout.reingold.tilford(g, circular=T) 
> plot(g, layout=layout) 
18

Vous voudrez peut-être essayer layout.fruchterman.reingold() . Il semble faire un bon travail en gardant les bords de la traversée. Je l'ai testé avec une version de 355 nœuds du graphique barabasi proposé par @ Tamás.

library(igraph) 

g = barabasi.game(355, directed=FALSE) 

png("plot1.png", height=6, width=12, units="in", res=200) 
par(mfrow=c(1, 2)) 

plot.igraph(g,vertex.size=3,vertex.label=NA, 
    layout=layout.fruchterman.reingold(g, niter=10000)) 
mtext("layout.fruchterman.reingold, area = vcount^2", side=1) 

plot.igraph(g,vertex.size=3,vertex.label=NA, 
    layout=layout.fruchterman.reingold(g, niter=10000, area=30*vcount(g)^2)) 
mtext("layout.fruchterman.reingold, area = 30 * vcount^2", side=1) 

dev.off() 

enter image description here

+3

Message d'avertissement: In layout_with_fr (list (355, FALSE, c (1, 2, 3, 4, 5, 6, 7, 8, 9,: Argument 'area 'est obsolète et n'a aucun effet – EngrStudent

+0

@bdemarest: Avez-vous des suggestions sur ce qu'il faut utiliser à la place de l'argument" area ", s'il vous plaît?" Area "est obsolète et je ne peux pas reproduire votre solution maintenant. – nilsole

+0

'? layout_with_fr' coolexp, maxdelta, area, repulserad \t Ces arguments ne sont pas pris en charge par igraph version 0.8.0 et sont ignorés (avec un avertissement) – pengchy

16

veux juste ajouter un commentaire, mais mon représentant est trop faible. La méthode affichée par @bdemarest ne fonctionne pas sur la version igraph> 0.7. La nouvelle version ne supporte pas le paramètre area, donc je ne peux pas obtenir le même effet. Et obtenir l'ancienne version à construire m'a pris un certain temps, alors je voudrais partager quelques idées. Vous pouvez installer manuellement igraph 0.7 à partir de la source si vous le téléchargez à partir de igraph nightly builds. Sur ma machine (Mac OS 10.10), j'ai rencontré quelques problèmes de construction, en raison de gfortran, donc j'ai trouvé this link qui a résolu le problème. Espoir qui aide tous ceux qui veulent créer des graphiques similaires dans R.

+1

Vous donner quelques repo ... :) – Aminadav

Questions connexes