Visualiser la matrice de distance sous forme de graphique
Je suis en train de faire un regroupement de tâches et j'ai une matrice de distance. Je souhaite visualiser cette matrice de distance comme un graphe 2D. S'il vous plaît laissez-moi savoir si il y a moyen de le faire en ligne ou dans des langages de programmation comme R ou python.
Mon matrice de distance est comme suit,
J'ai utilisé le classique "Multidimensional scaling" la fonctionnalité (R) et a obtenu un graphique 2D qui ressemble à:
Mais Ce que je cherche, c'est un graphe dont les nœuds et la pondération des arêtes de course entre eux.
- J'ai essayé pas mal de choses mentionnées dans les réponses (comme vida.io, python extraits de code - à la fois en vain). J'espère que je peux obtenir le code python au travail bientôt. Aussi, je suis parallèlement en faisant un peu de lecture (concernant mon travail), donc si vous voulez me mettre à jour ce post/ accepter une réponse si peu de temps, il n'est PAS POSSIBLE.
- Eh bien, le MDS graphique est un bon début. Puis ajouter Delauney triangulation ou utilisez une autre heuristique pour ajouter des bords.
- OK, point de pris, je mettrai à jour cette question, quand je suis en mesure d'obtenir les bords.
Vous devez vous connecter pour publier un commentaire.
Possibilité 1
Je suppose, que vous voulez un 2dimensional graphique, où les distances entre les nœuds, les positions sont les mêmes que celles prévues par votre table.
En python, vous pouvez utiliser
networkx
pour de telles applications. En général, il y a manymethods de le faire, rappelez-vous, que tous d'entre eux sont seulement des approximations (comme en général il n'est pas possible de créer un 2 dimensions representataion de points donné leurs distances deux à deux), Ils sont en quelque sorte des stress-minimizatin (ou de l'énergie-une minimisation des approximations, en essayant de trouver le "raisonnable" de la représentation avec similaire distances que celles prévues.Comme un exemple, vous pouvez envisager un des quatre points d'exemple (avec la bonne, discret métrique appliquée):
En général, le dessin réel "graphique" est redondant, comme vous l'avez entièrement connecté un (chaque paire de nœuds est connecté), donc ça devrait être suffisant pour attirer tout les points.
Exemple Python
Dans R, vous pouvez essayer "multidimensional scaling"
Possibilité 2
Vous voulez juste pour tracer un graphique avec la mention bords
De nouveau,
networkx
peut aider:Vous n'avez pas mentionné, si vous voulez un graphique en 2 dimensions ou pas. Je suppose que vous voulez construire un graphique en 2 dimensions en raison du fait que vous avez besoin pour la visualisation. Considérant que vous devez être conscient que, pour la plupart des graphiques ce n'est tout simplement pas possible.
Ce qui peut être fait est de se rapprocher en quelque sorte les valeurs de matrice de distance, quelque chose comme de petites valeurs relative petits bords et de grandes valeurs, d'une relative grande longueur.
Avec toutes les considérations précédentes une option serait graphviz. Voir neato fonction.
En général ce qui vous intéresse, c'est la force dirigée dessin. Voir wikipédia pour référence ultérieure.
"Multidimensional scaling" (MDS) est exactement ce que vous voulez. Voir ici et ici pour plus d'.
Vous pouvez utiliser d3js Force Graphe orienté et configurer la distance entre les nœuds. d3js de la force de mise en page a une certaine capacité de clustering pour séparer les nœuds avec des distances similaires. Voici un exemple avec des valeurs comme la distance entre les nœuds:
http://vida.io/documents/SyT7DREdQmGSpsBkK
Une autre façon de voir est d'utiliser la même distance entre les nœuds, mais différente de l'épaisseur de la ligne. Dans ce cas, vous souhaitez calculer la largeur du trait fondée sur des valeurs: