Dessiner le réseau en R (épaisseur de l'arête de contrôle et bords non chevauchants)
J'ai besoin de dessiner un réseau avec 5 nœuds et 20 arêtes orientées (une arête reliant chaque 2 noeuds) à l'aide de R, mais j'ai besoin de deux fonctions d'exister:
- Pour être en mesure de contrôler l'épaisseur de chaque bord.
- Les bords de ne pas être imbriquées (c'est à dire,le bord formulaire de A à B n'est pas établi sur le bord de B à A)
J'ai passé des heures à chercher une solution, et j'ai essayé de nombreux paquets, mais il y a toujours un problème.
Quelqu'un peut-il proposer une solution s'il vous plaît et fournir un exemple complet que possible?
Merci beaucoup à l'avance.
source d'informationauteur Pansy
Vous devez vous connecter pour publier un commentaire.
Si c'est ok pour les lignes de courbure puis j'ai fait la connaissance de deux façons. J'ai d'abord créer un edgelist:
Il contient le nœud d'origine à la première colonne, le noeud de destination lors de la deuxième et de poids à la troisième. Vous pouvez utiliser mon pacake qgraph pour tracer un graphe pondéré à l'aide de ce. Par défaut, les bords sont incurvés si il y a plusieurs arêtes entre deux nœuds:
Cependant ce paquet n'est pas vraiment prévu à cet effet et vous ne pouvez pas changer les couleurs des extrémités (pourtant, travailler sur elle:) ). Vous ne pouvez faire toutes les arêtes noir avec une petite astuce:
Pour plus de contrôle, vous pouvez utiliser le package igraph. Nous avons d'abord que le graphe:
Noter que la conversion de la matrice et de la soustraction d'une parce que le premier nœud est de 0. Ensuite, nous définissons la mise en page:
Maintenant, nous pouvons changer une partie de la périphérie des paramètres avec le
E()
fonction:Et enfin le graphe:
Alors que pas un R répondre plus précisément, je recommande l'utilisation de Cytoscape pour générer le réseau.
Vous pouvez l'automatiser à l'aide d'un RCytoscape.
http://bioconductor.org/packages/release/bioc/html/RCytoscape.html
Le paquet informativement nommé "réseau" peut tirer dirigé réseaux assez bien, et de gérer vos problèmes.
Le bord.la courbe de l'argument, s'il est réglé très bas, et combiné avec usecurve=T, sépare les bords, mais il y a peut être un moyen plus direct de le faire, et edge.lwd peut prendre un vecteur comme argument pour différentes tailles.
Il n'est pas toujours le plus joli résultat, je l'avoue. Mais il est assez facile d'obtenir de bons à la recherche du réseau de parcelles qui peuvent être personnalisés dans un certain nombre de façons différentes (voir ?réseau.l'intrigue).
Le "non cumul" de contrainte sur les bords, c'est le gros problème ici. Tout d'abord, votre réseau doit être 'planes' sinon c'est impossible en 2-dimensions (vous ne pouvez pas connecter des trois maisons de gaz, d'électricité, de téléphone de la compagnie des bâtiments, sans croisements).
Je pense qu'un algorithme de graphe planaire disposition essentiellement résout le 4, de la couleur de problème. Amusez-vous. Heuristiques existent, recherche pour un graphe planaire mise en page, et force dirigée, et de lire Graphe Planaire Mises En Page