Le module Networkx doit être téléchargé ici (prendre le fichier tar.gz), puis décompressé. Pour utiliser la bibliothèque, vous devez être dans le répertoire décompressé. Attention : il semblerait que ce module doit être retéléchargé à chaque séance.
Module permettant de manipuler des graphes. Pour l'importer :
>>> from networkx import *
cette commande ne marche que si vous êtes dans le répertoire networkx-1.7. Créer un graphe :
>>> G=Graph()
Ajouter un ou plusieurs noeuds :
>>> G.add_node(1) >>> G.add_nodes_from([2,3])
Ajouter des arcs :
>>> G.add_edges_from([(1,2),(1,3)])
Obtenir une représentation graphique avec Pylab :
>>> import pylab as P >>> draw(G) >>> P.show() >>> draw_circular(G) >>> P.show()
Pour réaliser un digraphe (ou graphe orienté) avec networkx, et le visualiser avec Pylab, on utilise la classe DiGraph au lieu de Graph :
>>> from networkx import * >>> G = DiGraph() >>> G.add_nodes_from([0,1,2,3,4]) >>> G.add_edges_from([(0,1),(1,0),(1,2),(2,1),(2,3),(3,2),(3,4),(4,3)]) >>> draw(G) >>> import pylab as P >>> P.show()
networks utilise 4 classes différentes, selon le type de graphe :
Montrons comment créer un MultiDiGraph, avec boucles :
>>> G = MultiDiGraph() >>> G.add_nodes_from([1,2,3,4]) >>> G.add_edges_from([(1,1),(1,2),(1,3),(2,3),(3,3),(2,4),(4,4)])
On peut alors demander le nombre de boucles, et la liste des boucles :
>>> G.number_of_selfloops() >>> G.selfloop_edges()
Cette fois-ci, on n'utilise pas Pylab, pour représenter le graphe, mais graphviz (pas installé en salle de TP, pour l'instant) :
>>> from networkx import * >>> G=complete_graph(5) # K5 est le graphe complet à 5 noeuds >>> A=to_agraph(G) # convertion vers graphviz >>> A.layout() # choix de la mise en page : celle de base (neato) >>> A.draw("k5.ps") # écriture du résultat dans un fichier postscript
Le résultat doit être visualisé à part. Pour visualiser le fichier k5.ps, on peut par exemple taper ceci dans un terminal (sous linux) :
$ evince k5.ps
Au lieu d'utiliser la mise en page de base, à savoir neato, on peut en préciser une autre :
>>> A=to_agraph(G) >>> A.layout(prog='dot') >>> A.draw('graphe2.jpg',prog)
Les choix possibles sont : neato,dot,twopi,circo,fdp, et nop.
Vous pourrez trouver d'autres informations, de la documentation et l'API sur le site de Networkx : ici.