Les diagrammes de Venn permettent de représenter des liens entre ensembles d'objets : combien d'objets sont communs à plusieurs ensembles, et combien sont spécifiques d'un seul ensemble.
Pour les besoins de ce tutoriel, j'ai créé deux ensembles :
Prenez-un moment pour lire ce code et le comprendre.
lesFruits <- make.unique(fruits$nom)
vitC <- lesFruits[fruits$VitamineC > 10]
vitE <- lesFruits[fruits$VitamineE > 1]
vitList <- list(vitC = vitC, vitE = vitE)
La fonction ggvenn
du package ggvenn
vous permettra de générer un diagramme de Venn entre au plus 5 ensembles. Modifiez les couleurs !
ggvenn(vitList)
ggvenn(vitList, fill_color = c("orange", "limegreen"))
Les auteurs de la publications UpSet: Visualization of Intersecting Sets sont partis du constat qu'à partir de 4 ou 5 ensembles différents, le diagramme de Venn atteint ses limites. Ils ont proposé un visualisation à base de diagrammes en bâtons de points qui permettent de représenter l'information complexe de ce qui est partagé ou pas entre plusieurs groupes. Cette nouvelle représentation, appelée UpSet
, est implémentée en R dans la librairie UpSetR
et sa fonction principale upset
.
Ce n'est pas forcément évident au premier regard : la fonction upset
n'accepte pas les mêmes types d'argument en entrée que la fonction venn.diagram
. La fonction upset
souhaite en effet comme argument principal avoir une matrice de 0s et de 1s avec
Qu'est-ce que cela signifie pour notre exemple ?
J'ai créé pour vous cette data-frame de zéros et de uns avec la commande suivante. Examinez cette commande pendant quelques instants.
Pour générer un diagramme UpSet, utilisez ensuite la commande suivante. Puis modifiez la pour faire un joli graphe !
upset(dat01)
# C'est vraiment tout ce qu'on peut faire
# avant de descendre dans des paramètres
# vraiment très compliqués !
upset(data = dat01,
order.by = "degree",
sets.bar.color = "steelblue")
Rassurez-vous tout de même, il existe dans le package UpSetR
une fonction qui permet automatiquement de passer une liste à upset
: la fonction fromList
.
Par exemple, exécutez le code suivant : ouf, on n'a pas besoin de faire de gymnastique compliquée pour transformer nos données après tout !
upset(fromList(vitList))