Diagramme de Venn en R : en faire un avec VennDiagram
Tracez des diagrammes de Venn à 2, 3 et 4 ensembles, colorez les cercles, étiquetez les effectifs et enregistrez la figure
Faites un diagramme de Venn en R avec le package VennDiagram. Tracez des diagrammes à deux, trois et quatre ensembles, définissez les couleurs de remplissage et la transparence, renommez les ensembles, affichez les effectifs et enregistrez la figure dans un fichier — avec l’alternative ggplot/ggvenn.
Date de publication
27 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Tracez un diagramme de Venn en R avec VennDiagram — draw.pairwise.venn() (2 ensembles), draw.triple.venn() (3 ensembles) et venn.diagram() (un nombre quelconque, à partir de listes).
venn.diagram() prend une liste nommée de vecteurs et calcule pour vous chaque effectif de chevauchement — aucun calcul manuel.
Définissez les couleurs des cercles avec fill, adoucissez-les avec alpha (transparence), et renommez les ensembles avec category.names.
Par défaut, venn.diagram() écrit dans un fichier ; passez filename = NULL et grid.draw() pour l’afficher dans R à la place.
Vous préférez la grammaire des graphiques ? ggvenn et ggVennDiagram construisent des diagrammes de Venn comme des objets ggplot (alternative présentée dans le texte).
Introduction
Vous avez plusieurs listes de gènes, segments de clientèle ou groupes d’enquête, et vous voulez une seule image qui montre comment ils se chevauchent — ce qui est partagé, ce qui est unique. Cette image, c’est un diagramme de Venn : des cercles qui se chevauchent, un par ensemble, chaque région étiquetée par le nombre d’éléments qui y tombent.
En R, l’outil de référence est le package VennDiagram. Il trace des diagrammes prêts à publier pour 2 à 4 ensembles, calcule pour vous chaque effectif d’intersection, et vous laisse colorer, étiqueter et enregistrer le résultat. Cette leçon en construit un, d’un diagramme à deux ensembles vers un diagramme à quatre ensembles, puis couvre les couleurs, la transparence, les noms d’ensembles, les effectifs et l’enregistrement — et vous oriente vers les alternatives basées sur ggplot à la fin.
Installez-le une fois :
install.packages("VennDiagram")
Les données
Nous utiliserons un petit exemple reproductible : quatre ensembles de « gènes » tirés d’un pool commun de 1000. Les mêmes listes alimentent chaque diagramme ci-dessous. C’est du R de base — pas de tidyverse — et autonome, donc vous pouvez copier n’importe quel bloc et l’exécuter seul.
set.seed(20190708)genes <-paste0("gene", 1:1000)set_list <-list(A =sample(genes, 300),B =sample(genes, 525),C =sample(genes, 440),D =sample(genes, 350))# Sizes of each setsapply(set_list, length)
A B C D
300 525 440 350
set_list est une liste nommée de vecteurs de caractères — la forme attendue par VennDiagram. Chaque nom (A, B, C, D) devient un cercle ; les chevauchements sont calculés à partir des éléments partagés.
Un diagramme de Venn à deux ensembles
Pour exactement deux ensembles, draw.pairwise.venn() est la voie la plus directe. Elle prend les deux tailles d’ensembles et la taille de leur intersection, puis trace le diagramme à deux cercles. Nous calculons d’abord les trois nombres en R de base.
library(VennDiagram)# The three counts: |A|, |B|, |A and B|n_A <-length(set_list$A)n_B <-length(set_list$B)n_AB <-length(intersect(set_list$A, set_list$B))grid.newpage()draw.pairwise.venn(area1 = n_A, area2 = n_B, cross.area = n_AB,category =c("A", "B"),fill =c("#3a86d4", "#f4a259"),alpha =0.5, lty ="blank",cat.pos =c(-20, 20))
area1/area2 sont les deux tailles d’ensembles, cross.area est le chevauchement, et category nomme les cercles. fill les colore, alpha = 0.5 les rend semi-transparents pour que le chevauchement se lise clairement, et lty = "blank" supprime les contours des cercles pour un rendu plus épuré. Nous appelons d’abord grid.newpage() car VennDiagram dessine sur une page grid.
Un diagramme de Venn à trois ensembles
La fonction venn.diagram() est l’outil général : passez-lui la liste nommée et elle calcule tous les chevauchements elle-même — aucun appel manuel à intersect(). Par défaut elle écrit dans un fichier, donc nous mettons filename = NULL pour récupérer un objet dessinable, puis nous le dessinons sur la page avec grid.draw(). C’est notre figure phare.
library(VennDiagram)library(grid)venn_obj <-venn.diagram(x = set_list[c("A", "B", "C")],filename =NULL,fill =c("#3a86d4", "#f4a259", "#5fad56"),alpha =0.5, lty ="blank",cex =1.1, # size of the count numberscat.cex =1.2, # size of the set namescat.fontface ="bold")grid.newpage()grid.draw(venn_obj)
x = set_list[c("A", "B", "C")] passe les trois premiers ensembles. venn.diagram() renvoie un objet graphique grid ; grid.draw() le rend. cex contrôle les étiquettes d’effectifs, cat.cex et cat.fontface stylisent les noms d’ensembles. Les sept régions que vous voyez — trois « seul », trois « par paire », une « tous les trois » — sont toutes comptées automatiquement.
Un diagramme de Venn à quatre ensembles
Le même appel venn.diagram() gère quatre ensembles ; passez la liste complète. Les diagrammes à quatre ensembles utilisent des ellipses (pas des cercles) pour que chacune des 15 régions ait de la place pour son effectif.
Quatre ensembles, c’est le plafond pratique pour un diagramme de Venn lisible — au-delà de quatre, les régions deviennent trop petites et les formes trop contorsionnées pour être étiquetées clairement. Pour cinq ensembles ou plus, un UpSet plot (UpSetR) est l’alternative standard.
Couleurs, transparence et noms d’ensembles
L’apparence du diagramme provient de quelques arguments que vous pouvez combiner sur n’importe lequel des appels ci-dessus :
fill — une couleur par ensemble. Utilisez un jeu adapté au daltonisme ; ici azur / orange / vert / rouge.
alpha — transparence du remplissage (0 invisible, 1 opaque). 0.5 laisse les chevauchements transparaître.
lty — type de ligne du contour ; "blank" supprime les bordures des cercles.
category.names (dans venn.diagram()) ou category (dans les fonctions draw.*) — les étiquettes.
cat.fontface, cat.cex, cat.dist, cat.pos — stylisent et positionnent les noms d’ensembles.
category.names renomme les ensembles, fontface = "italic" stylise les effectifs, et cat.default.pos = "outer" avec cat.dist pousse les étiquettes d’ensembles hors des cercles pour qu’elles n’entrent pas en collision avec les effectifs.
Obtenir les effectifs de chevauchement
Parfois vous voulez les nombres, pas seulement l’image — quels éléments sont partagés, et combien. Le R de base vous donne les deux avec intersect() et Reduce() :
# Items common to all three setscommon_ABC <-Reduce(intersect, set_list[c("A", "B", "C")])length(common_ABC)
[1] 64
# Items unique to A (in A, in neither B nor C)unique_A <-setdiff(set_list$A, union(set_list$B, set_list$C))length(unique_A)
[1] 85
Ce sont les mêmes effectifs que venn.diagram() affiche dans chaque région — pratique quand vous avez besoin des éléments réels (p. ex. les noms de gènes partagés) pour l’étape suivante d’une analyse.
Enregistrer le diagramme dans un fichier
venn.diagram() a été conçu pour écrire directement une image prête à publier. Donnez-lui un filename avec une extension d’image et il enregistre la figure au lieu de renvoyer un objet :
imagetype accepte "png", "tiff" ou "svg" ; height/width/resolution définissent la taille de sortie. Lorsque vous voulez plutôt le diagramme à l’intérieur d’un document knitr/R Markdown ou dans le volet de tracé, utilisez filename = NULL + grid.draw() comme montré ci-dessus.
L’alternative ggplot : ggvenn et ggVennDiagram
Si vous préférez la grammaire des graphiques, deux extensions ggplot2 construisent des diagrammes de Venn comme des objets ggplot que vous pouvez thématiser et combiner comme tout autre graphique (ceux-ci ne sont pas exécutés ici, mais les recettes sont standard) :
ggvenn attribue une couleur par ensemble, à la manière de VennDiagram :
ggVennDiagram associe la couleur de remplissage de chaque région à son effectif, de sorte que les chevauchements plus denses ressortent :
library(ggVennDiagram)ggVennDiagram(set_list, label_alpha =0) + ggplot2::scale_fill_gradient(low ="#deebf7", high ="#08519c")
Les deux renvoient des objets ggplot, vous pouvez donc ajouter theme_minimal(), des titres ou des facettes. Installez-les avec install.packages(c("ggvenn", "ggVennDiagram")). Utilisez VennDiagram pour le plus grand contrôle sur une figure classique en noir et blanc ou en couleur ; utilisez ggVennDiagram quand vous voulez que les effectifs de chevauchement soient affichés en gradient de couleur.
🟢 Avec un agent IA
Demandez à Prova« pourquoi mon diagramme de Venn enregistre-t-il un fichier au lieu de s’afficher dans R ? » — elle répond avec du code R que vous pouvez exécuter, donc la correction est reproductible. The runtime is the judge.Demander à Prova →
Problèmes courants
venn.diagram() écrit un fichier au lieu de tracer. C’est le comportement par défaut — il est conçu pour exporter une image. Pour afficher le diagramme dans R (ou l’intégrer dans un document), passez filename = NULL pour qu’il renvoie un objet grid, puis dessinez-le : grid.newpage(); grid.draw(venn.diagram(x, filename = NULL)).
Un fichier VennDiagram*.log ne cesse d’apparaître.VennDiagram écrit un fichier journal futile.logger à chaque appel. Faites-le taire en ajoutant futile.logger::flog.threshold(futile.logger::ERROR, name = "VennDiagramLogger") une fois en haut de votre script, avant tout appel à venn.diagram().
Chaque appel s’ajoute au diagramme précédent.grid n’efface pas la page automatiquement. Appelez grid.newpage() juste avant grid.draw() (ou avant un appel draw.pairwise.venn() / draw.triple.venn()) pour que chaque diagramme démarre sur une page neuve.
Questions fréquentes
NoteComment faire un diagramme de Venn en R ?
Installez et chargez le package VennDiagram, mettez vos groupes dans une liste nommée de vecteurs (list(A = ..., B = ...)), puis appelez venn.diagram(x, filename = NULL) et dessinez le résultat avec grid.draw(). Pour seulement deux ou trois ensembles, vous pouvez aussi utiliser draw.pairwise.venn() ou draw.triple.venn() avec les effectifs directement.
NoteCombien d’ensembles un diagramme de Venn en R peut-il montrer ?
VennDiagram trace clairement 2 à 4 ensembles (quatre ensembles utilisent des ellipses pour que chaque région reste étiquetée). Au-delà de quatre ensembles, les régions deviennent trop petites à lire — passez à un UpSet plot (UpSetR) pour cinq groupes ou plus.
NoteComment changer les couleurs d’un diagramme de Venn en R ?
Passez un vecteur de couleurs à fill — une par ensemble — et contrôlez la transparence avec alpha (p. ex. alpha = 0.5). Supprimez les contours des cercles avec lty = "blank". Les mêmes arguments fonctionnent dans venn.diagram() et les fonctions draw.*.
NoteComment faire un diagramme de Venn avec ggplot en R ?
Utilisez une extension ggplot2 : ggvenn (une couleur par ensemble) ou ggVennDiagram (couleur de région associée à l’effectif). Les deux prennent la même liste nommée et renvoient un objet ggplot que vous pouvez thématiser et combiner — p. ex. ggvenn(set_list) ou ggVennDiagram(set_list, label_alpha = 0).
NoteComment enregistrer un diagramme de Venn dans un fichier en R ?
Donnez à venn.diagram() un filename avec une extension d’image et définissez imagetype ("png", "tiff" ou "svg"), plus height, width et resolution. Il écrit la figure directement — pas besoin de png()/dev.off() séparés.
Testez vos connaissances
ImportantExercice : tracer et colorer un diagramme de Venn à trois ensembles
À partir d’une liste nommée de trois vecteurs, tracez un diagramme de Venn à trois ensembles avec venn.diagram() qui : l’affiche dans R (pas un fichier), utilise trois couleurs fill adaptées au daltonisme à alpha = 0.5, supprime les contours des cercles, et renomme les ensembles en "Group 1", "Group 2", "Group 3".
set.seed(1)pool <-paste0("id", 1:200)groups <-list(G1 =sample(pool, 80),G2 =sample(pool, 90),G3 =sample(pool, 70))# Your venn.diagram() call here
AstuceIndice
Passez la liste à x, mettez filename = NULL, donnez trois couleurs à fill et alpha = 0.5, mettez lty = "blank", et renommez avec category.names. Puis grid.newpage() et dessinez le résultat avec grid.draw().
filename = NULL renvoie un objet dessinable, fill + alpha colorent les cercles semi-transparents, et category.names réétiquette les ensembles.
Vérification rapide. Vous appelez venn.diagram(set_list) et rien n’apparaît dans le volet de tracé — à la place un .png surgit dans votre répertoire de travail. Quel changement unique affiche le diagramme dans R ?
AstuceAfficher la réponse
Ajoutez filename = NULL pour que venn.diagram() renvoie un objet grid, puis dessinez-le avec grid.newpage(); grid.draw(...). Avec un filename non-NULL, il écrit toujours sur le disque à la place.
Conclusion
VennDiagram est la façon directe de tracer un diagramme de Venn en R : une liste nommée dans venn.diagram() (ou les fonctions draw.pairwise.venn() / draw.triple.venn() pour 2–3 ensembles), fill et alpha pour l’apparence, category.names pour les étiquettes, et filename pour enregistrer ou filename = NULL + grid.draw() pour afficher. Pour une figure native ggplot, optez pour ggvenn ou ggVennDiagram ; pour cinq ensembles ou plus, un UpSet plot.
Leçons connexes
Couleurs en R — construisez les palettes adaptées au daltonisme utilisées pour les remplissages des cercles. · Ajouter une légende — étiquetez les groupes sur les graphiques R de base. · Diagramme en barres — une autre façon de comparer les tailles de groupes et les effectifs.
Cette leçon est reproductible : chaque figure a été produite par le code affiché, exécuté lors de la génération du site (si elles s’affichent, le code fonctionne). Copiez n’importe quel bloc et exécutez-le pour les reproduire. The runtime is the judge.
@online{2026,
author = {},
title = {Diagramme de Venn en R : en faire un avec VennDiagram},
date = {2026-06-27},
url = {https://www.datanovia.com/learn/data-visualization/venn-diagram-in-r},
langid = {fr}
}