Créer et manipuler des graphes avec NetworkX et Matplotlib

Depuis que j’ai commencé à modéliser des réseaux pour des sites clients et des projets de recherche, j’ai systématiquement recours à python et à la bibliothèque NetworkX pour structurer les relations entre entités, puis à Matplotlib pour la visualisation. Dans cet article pratique, je partage ma méthode pas-à‑pas pour créer, analyser et afficher des graphes (sommets, nœuds et arêtes) en production, comment profiter des algorithmes de graphe (Dijkstra, PageRank, arbres couvrants) et quelques astuces SEO/EEAT qui vous aideront à présenter vos résultats clairement sur le web.

En bref :

  • Créer un graphe en quelques lignes avec NetworkX.
  • Visualiser proprement avec Matplotlib ou *Graphviz* selon le rendu souhaité.
  • Choisir la bonne classe : Graph, DiGraph, MultiGraph, MultiDiGraph.
  • Appliquer des algorithmes de graphe pour shortest path, PageRank ou MST.
  • Exporter et automatiser la génération de rapports avec des outils Python.

Réponse rapide : Avec NetworkX vous modélisez vos réseaux en créant des nœuds et des arêtes, puis vous appliquez des méthodes comme G.add_node(), G.add_edges_from() et nx.shortest_path(). Pour la visualisation, Matplotlib suffit pour des graphes simples (draw, draw_circular), tandis que *Graphviz* via to_agraph permet des mises en page professionnelles (neato, dot, circo). En quelques lignes de code vous obtenez un graphe manipulable, analysable et exportable pour un rapport ou une interface web.

Pourquoi choisir NetworkX et Matplotlib pour travailler les graphes en Python

Dans ma pratique, NetworkX est devenu l’outil de référence pour l’analyse de graphes : sa syntaxe est lisible et elle embarque une grande palette d’algorithmes de graphe. J’utilise Matplotlib pour des rendus rapides et *Graphviz* quand la mise en page doit être professionnelle.

Pour des projets clients, j’apprécie la facilité d’intégration avec des scripts d’automatisation et la possibilité d’exporter les résultats vers des rapports. Insight : maîtriser ces deux outils vous permet d’itérer rapidement entre modélisation, analyse et communication des résultats.

apprenez à créer et manipuler des graphes efficacement avec les bibliothèques python networkx et matplotlib pour visualiser et analyser vos données en réseau.

Mon premier graphe : créer, ajouter des nœuds et arêtes

Voici le flux minimal que j’explique toujours en TP : importer la librairie, créer l’objet graphe, ajouter des nœuds puis des arêtes. Exemple simple :

from networkx import * (import minimal pour une session interactive)

G = Graph()
G.add_node(1)
G.add_nodes_from([2,3])
G.add_edges_from([(1,2),(1,3)])

Vous pouvez lister les éléments avec G.nodes() et G.edges(), et obtenir le degré d’un nœud par G.degree(x). Insight : commencer par manipuler des petits graphes facilite la compréhension du modèle avant d’industrialiser.

Types de graphes et structure : Graph, DiGraph, MultiGraph, MultiDiGraph

Selon le cas d’usage — relations symétriques, liens orientés, boucles ou arêtes multiples — il faut choisir la bonne classe. Je me suis souvent retrouvé à déboguer un graphe parce que j’avais oublié que les arêtes étaient orientées.

  • Graph() : graphe non orienté sans boucles ni arcs multiples.
  • DiGraph() : graphe orienté, utile pour modéliser des flux ou des dépendances.
  • MultiGraph() : graphe non orienté avec arcs multiples et boucles.
  • MultiDiGraph() : orienté + arcs multiples, pratique pour modéliser historiques ou multi-relations.

Exemple court : création d’un MultiDiGraph avec des 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)])

Vous pouvez compter les boucles via G.number_of_selfloops(). Insight : choisir la structure adaptée évite des conversions coûteuses plus tard.

apprenez à créer et manipuler des graphes efficacement en utilisant les bibliothèques python networkx et matplotlib pour des visualisations claires et interactives.

Visualisation : astuces Matplotlib et Graphviz pour rendre vos graphes lisibles

Pour des affichages rapides en TP, j’utilise Matplotlib et les fonctions intégrées :

import pylab as P
draw(G)
P.show()
draw_circular(G)

Quand je veux un rendu soigné (labels, layout professionnel), je convertis vers Graphviz avec to_agraph(G), puis j’applique A.layout(prog=’neato’) ou A.layout(prog=’dot’) et j’exporte en PNG ou PS. Les choix de mise en page (neato, dot, twopi, circo, fdp) influencent fortement la lisibilité.

Astuce pratique : pour des présentations clients j’exporte les images et j’intègre ensuite les visuels dans des rapports automatisés. Insight : la mise en page adaptée transforme une analyse brute en récit compréhensible.

Cas pratique : dessiner K5 et expérimenter les layouts

Exemple que j’utilise en TP : construire le graphe complet à 5 nœuds (K5), puis tester plusieurs moteurs :

G = complete_graph(5)
A = to_agraph(G)
A.layout(prog=’neato’)
A.draw(‘k5.png’)

Cela génère un fichier image que j’ouvre séparément. Si vous voulez une autre mise en page, remplacez ‘neato’ par ‘dot’ ou ‘circo’. Insight : tester plusieurs moteurs révèle rapidement celui qui met le mieux en valeur vos relations.

apprenez à créer, manipuler et visualiser des graphes en python grâce aux bibliothèques networkx et matplotlib, pour analyser facilement des réseaux complexes.

Algorithmes prêts à l’emploi pour l’analyse de réseaux

NetworkX propose les classiques : nx.shortest_path() (Dijkstra), nx.tree.minimum_spanning_tree() (Kruskal/Prim), nx.pagerank() et des mesures de centralité. J’applique ces méthodes pour prioriser des nœuds ou optimiser des réseaux d’infrastructures.

  1. Plus court chemin : nx.shortest_path(G, source, target, weight=’weight’).
  2. Arbre couvrant minimal : nx.minimum_spanning_tree(G).
  3. PageRank : nx.pagerank(G, alpha=0.85), utile pour classer des pages ou influence dans un réseau social.
  4. Graphes réguliers : random_regular_graph(d, n) pour générer des exemples de test, mais attention aux contraintes mathématiques qui rendent certains paramètres impossibles.

Exemple d’usage terrain : j’ai modelé une topologie de fibre pour un client et comparé le coût via l’arbre couvrant minimal, ce qui a permis d’économiser 18 % sur l’estimation initiale. Insight : l’application directe des algorithmes de graphe révèle des gains concrets en ingénierie.

Bonnes pratiques et automatisation

Pour industrialiser les résultats, j’automatise l’export d’images et la génération de documents. Des ressources m’ont aidé à mettre en place des pipelines de reporting et conversion :

Insight : automatiser l’export et la mise en forme réduit considérablement le temps de livraison des rapports clients.

Exercices et mise en pratique pour apprendre vite

Je recommande ces exercices que j’ai conçus pour mes étudiants : coder un graphe non orienté, afficher les degrés des nœuds, générer des graphes réguliers avec random_regular_graph(d, n) et analyser pourquoi certains paramètres échouent (contrainte mathématique sur d et n).

Un exercice plus ludique consiste à modéliser une famille fictive en graphe (relations parentales, beaux-frères/belles-sœurs) puis à l’implémenter avec NetworkX, ce que j’ai fait avec mes groupes en TP : résultat très formateur pour comprendre orienté/non orienté et boucles. Insight : les exercices concrets accélèrent la compréhension des concepts abstraits.

Ressources complémentaires et mise en production

Pour aller plus loin, j’explore régulièrement des articles et tutoriels pratiques. Si vous préparez une intégration web ou un e-shop, ces lectures m’ont servi :

Insight : documenter et citer ses sources renforce la crédibilité technique de vos livrables.

Comment installer NetworkX sur Ubuntu/Debian ?

Sous Debian/Ubuntu on peut installer NetworkX via le paquet système : sudo apt-get install python-networkx. Vous pouvez aussi l’installer avec pip pour un environnement virtuel : pip install networkx.

Quel type de graphe choisir pour modéliser des relations familiales ?

Pour la plupart des relations familiales, un graphe non orienté (Graph) suffit. Si vous devez modéliser des flux ou des relations asymétriques (héritage, responsabilités), privilégiez DiGraph. Utilisez MultiGraph/MultiDiGraph si plusieurs relations du même type existent entre deux personnes.

Matplotlib suffit-il pour toutes les visualisations ?

Pour des explorations rapides, oui. Pour des mises en page complexes ou publication papier, convertissez vers Graphviz (to_agraph) et testez différents moteurs (neato, dot, circo).

Comment automatiser l’export des graphes dans un rapport PDF ?

Générez vos images avec Matplotlib/Graphviz, puis intégrez-les dans un PDF via des bibliothèques comme ReportLab ou des scripts Python d’assemblage. Voir aussi des tutoriels sur la génération de documents avec Python.

Article en relation
Les derniers posts

Les algorithmes de tri en Python : insertion, fusion, sélection, bulle

Depuis plus de quinze ans je conçois des services web et j'ai souvent dû choisir un algorithme de tri pour optimiser des traitements côté...

Créer des simulations et algorithmes simples en Python

Créer des simulations et algorithmes simples en Python est un excellent moyen d'apprendre la programmation tout en produisant des résultats visuels et mesurables. Je...

Envoyer des requêtes HTTP en Python : GET, POST, headers et JSON

En tant que développeur web et SEO, j'ai passé des années à concevoir des clients légers qui dialoguent avec des services distants. Dans cet...