© 2025 Tous droits réservés
Cet article a été rédigé par d-sidd, un bureau d’études spécialisé dans les données des territoires, fondé et animé par Arnaud Milet et Emmanuelle Sourisseau. Passionnés par la représentation des données avec R, ils explorent et partagent des approches innovantes pour analyser et visualiser l’information.
Pour en savoir plus sur leurs activités et leurs expertises, rendez-vous sur leur site : d-sidd.
NB : Vous pouvez retrouver leur précédent article » Comment réaliser une carte avec des données libres sur R » ici
Un graphe en réseau sert à montrer et à comprendre les liens entre des éléments et les connexions qui les relient.
Autrement dit un graphe en réseau, c’est une façon simple et visuelle de représenter des systèmes de relations, parfois complexes, pour mieux les comprendre et les analyser. Il nous semble que c’est aussi un très bon outil de communication.
Par exemple, on peut représenter des personnes et leurs amitiés, des professionnels et leurs compétences, des ordinateurs et les données qu’ils échangent, des espèces vivantes et leurs liens de prédation etc… Les objets d’étude sont vastes et sans limite !
Pour comprendre l’objet et sa réalisation, nous vous proposons de nous appuyer sur un exemple simple : un petit réseau d’espèces reliées par leurs rapports de prédation et dont le rendu sera :
Comme habituellement dans R, il existe plusieurs fonctions et packages pour arriver à ses fins.
Nous présenterons ici le package igraph, l’une des premières bibliothèques en R conçues pour les graphes et réseaux et qui nous semble être une référence incontournable (documentation accessible avec vignette("igraph")
)
Mais il est aussi courant de combiner igraph avec ggraph ou visNetwork pour obtenir des visuels plus élaborés ou interactifs (un exemple est présenté plus bas ).
Ces propositions ne sont pas exhaustives et de nombreux autres packages existent.
Pour structurer les données qui permettent de réaliser un graphe en réseau, il faut considérer deux grandes catégories de données :
Les nœuds ou sommets (nodes ou vertices/vertex en anglais) : Ce sont les éléments clés, les sujets qui composent le système. Par exemple, dans un réseau social, les utilisateurs sont les nœuds, dans notre exemple “Qui mange qui”, ce sont les 6 espèces : Lion, Zèbre, Gazelle, Hyène, Herbe, Vautour.
Les liens ou arêtes (edges) : Ils définissent les interactions ou connexions ou relations entre ces nœuds/sommets. Par exemple, un lien peut représenter une relation d’amitié. Dans notre exemple, ce sont les 10 relations de prédation représentées entre les espèces.
Lion -> Zèbre, Lion -> Gazelle, Hyène -> Zèbre, Hyène -> Gazelle, Zèbre -> Herbe, Gazelle -> Herbe, Vautour -> Lion, Vautour -> Hyène, Vautour -> Gazelle, Vautour -> Zèbre.
Le sens des liens détermine si le graphe est orienté ou non orienté.
Un graphe non orienté est un graphe où les liens n’ont pas de direction. Autrement dit, si un nœud A est connecté à un nœud B, cela signifie que la relation entre A et B est bidirectionnelle Nœud A ↔︎ Nœud B, et on ne distingue pas un sens particulier dans cette relation.
Par exemple, dans un réseau social où les individus sont représentés par des nœuds et les relations d’amitié par des arêtes, on peut considérer que la relation d’amitié est symétrique (soyons un peu idéaliste !). En revanche, dans notre exemple “Qui mange qui”, on comprend que la relation de prédation a un sens avec une flèche Lion → Gazelle.
Dans un graphe orienté, cette relation peut être décrite avec les concepts “from” et “to”, où “from” désigne le nœud d’origine (le début de l’arête) et “to” désigne le nœud cible (la fin du lien).
Les attributs sont des propriétés ou des caractéristiques associées aux éléments d’un graphe, les sommets (ou nœuds) ou les liens (ou arêtes).
Ces attributs permettent de décrire des aspects spécifiques du graphe, comme la couleur, la taille, le type, ou toute autre information pertinente permettant de modifier l’aspect des éléments.
Dans notre exemple nous avons défini,
un attribut type en fonction des espèces (sommets) correspondant à la typologie suivante : Prédateur, Herbivore, Végétaux, Charognard.
un attribut color spécifique pour les espèces (sommets) en fonction de la typologie : red, yellow, green, orange
Nous allons construire notre graphe à partir de deux dataframes :
un dataframe “especes” des éléments (nœuds/sommets) pour décrire les espèces avec deux vecteurs, un vecteur/identifiant =“names” et un vecteur /attribut=“type” pour caractériser les espèces ce qui nous servira pour la mise en forme
un dataframe “relations” de prédations entre les espèces avec deux vecteurs “predateur” (from) et “proie” (to)
#Appel au package igraph
library(igraph)
#data frame des espèces (sommets)
especes <- data.frame(
names = c("Lion", "Zèbre", "Gazelle", "Hyène", "Herbe", "Vautour"),
type = c("Prédateur", "Herbivore", "Herbivore", "Prédateur", "Végétaux", "Charognard")
)
#data frame des relations (liens)
relations <- data.frame(
predateur = c("Lion", "Lion", "Hyène", "Hyène", "Zèbre", "Gazelle", "Vautour", "Vautour","Vautour","Vautour"),
proie = c("Zèbre", "Gazelle", "Zèbre", "Gazelle", "Herbe", "Herbe", "Lion", "Hyène","Gazelle", "Zèbre")
)
Nous faisons ensuite appel à la fonction d’igraph graph_from_data_frame()
qui permet de créer un objet de type graphe à partir de deux arguments principaux : un data frame représentant les liens (les connexions entre les nœuds) et un data frame optionnel représentant les nœuds (les entités elles-mêmes). Nous indiquons aussi que notre graphe sera orienté..
# Créer le graphe à partir des data frames "especes" et "relations"
graphe <- graph_from_data_frame(d = relations, vertices = especes, directed = TRUE)
Précisions :
Il est tout à fait possible de créer un graphe sans passer par un dataframe. Se reporter pour cela à la documentation vignette("igraph")
.
Le dataframe représentant les sommets est effectivement optionnel, vous pouvez vérifier avec graph_from_data_frame(d = relations, directed = TRUE)
, mais son usage permet de bien définir les sujets et leurs attributs.
Nous pouvons maintenant représenter notre objet graphe avec la fonction plot()
# Créer le représentation visuelle du graphe
plot(graphe)
…mais c’est assez brut avec les options par défaut de couleur et de taille. Nous allons donc l’améliorer.
Nous allons déjà modifier les couleurs des sommets, en associant des couleurs selon la typologie des espèces.
Pour cela nous allons créer un vecteur d’association de couleur, que nous allons appliquer à l’attribut “type” et définir ainsi une caractéristique (un attribut) “color” aux espèces.
# Associer des couleurs en fonction de la typologie
couleurs <- c("Prédateur" = "red", "Herbivore" = "yellow", "Végétaux" = "green", "Charognard" = "orange")
# Attribuer comme couleur de nœuds (Vertices), la couleurselon la typologie
V(graphe)$color <- couleurs[V(graphe)$type]
plot(graphe)
C’est déjà plus visuel mais on peut mieux faire.
Nous allons mettre en forme le graphe à partir des options dans plot()
, notamment pour ajuster la taille des sommets. De plus, nous rajoutons la légende avec la fonction legend()
de base de R, après avoir tracé le graphe.
.
plot(
graphe,
vertex.size = 30,# pour augmenter la taille des nœuds
vertex.label.color = "black", #pour définir la couleur des étiquettes
vertex.label.cex = 1.2,# pour définir la taille des étiquettes
edge.arrow.size = 0.5,# pour définir la taille des flêches
main = "Tataaaa : Qui mange qui ?"#pour rajouter un titre
)
# Ajouter la légende
legend("topright",
legend = names(couleurs),
fill = couleurs,
title = "Typologie",
bty = "n",
cex = 0.8)
Pour créer une visualisation interactive, les fonctions de visNetwork peuvent utiliser directement les objets d’igraph créé précédemment :
En repartant de l’objet créé avec igraph, le code est à reprendre ici :
library(visNetwork)
# Préparer les données pour visNetwork
nodes <- data.frame(
id = V(graphe)$name,
label = V(graphe)$name,
color = V(graphe)$color,
group = V(graphe)$type, # Typologie comme groupe
title = paste0("Type : ", V(graphe)$type) # Infobulle interactive
)
edges <- data.frame(
from = relations$predateur,
to = relations$proie,
title = paste0("Lien : ", relations$predateur, " mange ", relations$proie) # Infobulle interactive
)
# Créer le graphe interactif avec sélection par type
visNetwork(nodes, edges) %>%
visEdges(arrows = "to") %>%
visOptions(
highlightNearest = TRUE,
selectedBy = list(variable = "group", main = "Sélec. par type")
) %>%
visLayout(randomSeed = 42) %>%
visPhysics(
solver = "forceAtlas2Based",
forceAtlas2Based = list(gravitationalConstant = -200),
stabilization = list(iterations = 100)
) %>%
# Ajouter la légende personnalisée
visLegend(
useGroups = FALSE, # Désactiver la légende par défaut (groupes)
addNodes = data.frame(
label = names(couleurs), # Nom des groupes
color = couleurs, # Couleurs définies
shape = "dot", # Forme des éléments de la légende
size = 10, # Taille des éléments de la légende
font = list(
size = 13, # Taille de la police
face = "bold", # Style de la police (ex. "bold", "italic", etc.)
align = "left", # Alignement du texte
color = "black" # Couleur du texte
)
),
width = 0.3,
position = "left"
)
Nous espérons avoir suscité l’intérêt et donné envie d’aller plus loin dans ces représentations en réseau.
De notre côté, nous sommes convaincus par le potentiel d’analyse et de communication que cela constitue et nous sommes intéressés par les sujets d’application.
d-sidd a développé une application pour visualiser de façon interactive le réseau en évolution des compétences du collectif “Territoire & Sens” (T&S) de la coopérative d’activité et d’Emploi Crealead.
Pour accéder au graphe interactif des compétences de T&S : c’est ici
En décembre 2024, d-sidd a proposé à des entrepreneur.e.s de coopératives d’activité et d’emploi engagés pour travailler ensemble sur les tiers lieux, une représentation de leur réseau professionnel en construction, à partir de données collectées au travers de leurs échanges LinkedIn.
Pour en savoir plus sur les éléments de synthèse proposé par d-sidd et visualiser le graphe en réseau : c’est ici
Pour finir, voici quelques ressources en ligne qui nous ont accompagnés pour prendre en main les fonctions de représentation des réseaux :
Sans oublier l’IA : un assistant virtuel efficace pour suggérer ou corriger du code
Les graphes en réseau offrent une manière puissante et intuitive de représenter des relations complexes, qu’il s’agisse de réseaux sociaux, écologiques ou professionnels. Grâce à igraph, ggraph et visNetwork, il est possible de créer des visualisations adaptées à différents besoins, du simple graphe statique à l’interactivité avancée.
Si cet article vous a donné envie d’explorer davantage ces représentations, n’hésitez pas à tester ces outils sur vos propres données ! Et si vous avez des questions, des suggestions ou des expériences à partager sur la visualisation de réseaux sous R, laissez un commentaire ci-dessous. Votre retour est toujours précieux et enrichissant pour la communauté !
Abonnez-vous à ma mailing liste pour ne rien manquer !
Vous recevrez directement mes nouveaux articles, des ressources exclusives, et des actualités sur mes formations.
Si vous souhaitez soutenir mon travail, vous pouvez faire un don libre sur Tipeee.
© 2025 Tous droits réservés
Enregistrez vous pour recevoir gratuitement mes fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.
3 réponses
Merci, présentation synthétique très claire et facile à mettre en oeuvre sur d’autres exemples .
Merci, présentation synthétique très claire et facile à mettre en oeuvre sur d’autres exemples .
Sur la page « Laisser un commentaire » de votre blog:
Où se trouve le bouton « envoyer » pour valider l’envoi de ce message ?
Y’a-t-il aussi une fonction de « confirmation d’envoi et /ou de réception » du message, une fois qu’il a été envoyé ?
Bonjour,
Il y a seulement un bouton « laisser un commentaire », et non il n’y a pas de confirmation. Mais cela fonctionne comme vous pouvez le constater.