Diagramme de Venn

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 :

  • l'ensemble des fruits contenant de la Vitamine C (plus de 10 mg / 100G)
  • l'ensemble des fruits contenant de la Vitamine E (plus de 1 mg / 100G)

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 diagrammes UpSet

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

  • en ligne les éléments des ensembles,
  • en colonne les ensembles,
  • un 1 en position \((i,j)\) si l'élément \(i\) appartient au groupe \(j\),
  • un 0 sinon !

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))