J'ai des nœuds provenant d'un script que je souhaite mapper sur un graphique. Dans ce qui suit, je veux utiliser Arrow pour aller de A à D et avoir probablement le bord coloré aussi (rouge ou quelque chose du genre).
C'est fondamentalement, comme un chemin de A à D lorsque tous les autres nœuds sont présents. vous pouvez imaginer chaque nœud comme des villes et voyager de A à D nécessite des directions (avec des flèches).
Ce code ci-dessous construit le graphique
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edges_from(
[('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'),
('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')])
val_map = {'A': 1.0,
'D': 0.5714285714285714,
'H': 0.0}
values = [val_map.get(node, 0.25) for node in G.nodes()]
nx.draw(G, cmap = plt.get_cmap('jet'), node_color = values)
plt.show()
mais je veux quelque chose comme montré dans l'image.
Les flèches de la première image et les bords de couleur rouge sur la deuxième image.
(C, E)
n'est pas rouge parce que j'ai choisi les arêtes pour lered_edges
moment où je travaillais encore avec votre graphique non orienté, en sélectionnant simplement au hasard les arêtes renvoyées parG.edges()
. Ça devrait êtrered_edges = [('A', 'C'), ('E', 'C')]
.draw_networkx_edges()
. J'ai nettoyé le code et corrigé les problèmes DiGraph.Je ne l'ai mis que par souci d'exhaustivité. J'ai beaucoup appris de marius et de mdml. Voici les poids des bords. Désolé pour les flèches. On dirait que je ne suis pas le seul à dire que cela ne peut pas être aidé. Je ne pouvais pas rendre cela avec le cahier ipython, je devais passer directement de python, ce qui était le problème pour obtenir mes poids de bord plus tôt.
la source
node_labels = {node:node for node in G.nodes()}; nx.draw_networkx_labels(G, pos, labels=node_labels)
.G.add_edges_from()
ligne sans avoir à saisir manuellement le point de départ et d'arrivée? Peut-être ajouter des arêtes à partir d'undict
?Au lieu de nx.draw normal, vous pouvez utiliser:
Par exemple:
Vous pouvez ajouter des options en initialisant cette ** variable comme ceci:
Certaines fonctions prennent également en charge le
directed=True parameter
Dans ce cas, cet état est celui par défaut:La référence networkx se trouve ici .
la source
Vous devez utiliser un graphe orienté au lieu d'un graphe, c'est-à-dire
Ensuite, créez une liste des couleurs de bord que vous souhaitez utiliser et transmettez-les
nx.draw
(comme indiqué par @Marius).En mettant tout cela ensemble, j'obtiens l'image ci-dessous. Ce n'est toujours pas tout à fait l'autre image que vous montrez (je ne sais pas d'où viennent vos poids de bord), mais beaucoup plus proche! Si vous voulez plus de contrôle sur l'apparence de votre graphique de sortie (par exemple, obtenir des pointes de flèches qui ressemblent à des flèches), je vérifierais NetworkX avec Graphviz .
la source
C'est simplement comment dessiner un graphe dirigé en utilisant python 3.x en utilisant networkx. juste une représentation simple et peut être modifiée et colorée, etc. Voir le graphique généré ici .
Remarque: ce n'est qu'une simple représentation. Des bords pondérés pourraient être ajoutés comme
et donc tracé à nouveau.
la source
la source