62 votes

Diagramme de Venn proportionnel et ombrage coloré avec semi-transparence

J'ai les données de compte suivantes.

A   450
B   1800
A et B tous les deux    230

Je veux développer un diagramme de Venn coloré (éventuellement semi-transparent aux intersections) comme le diagramme de Venn suivant.

entrer la description de l'image ici

Note : Cette figure est un exemple dessiné à la main dans PowerPoint, et elle n'est pas à l'échelle.

0 votes

Pourquoi ne pas commencer par library("sos"); findFn("venn") et voir jusqu'où cela vous mène?

0 votes

Ou utilisez le package venneuler, il le fait.

58voto

Geek On Acid Points 3103

Voici un post qui discute du diagramme de Venn à partir d'une liste de clusters et de facteurs co-occurrents.

Pour une solution simple, utilisez le package venneuler:

require(venneuler)
v <- venneuler(c(A=450, B=1800, "A&B"=230))
plot(v)

enter image description here

Pour des solutions plus avancées et personnalisées, vérifiez le package VennDiagram.

library(VennDiagram) 
venn.diagram(list(B = 1:1800, A = 1571:2020), fill = c("lightblue", "green"), 
             alpha = c(0.5, 0.5), lwd =0, "venn_diagram.tiff")

enter image description here

0 votes

@John: la bonne pratique est d'abord de lire attentivement les fichiers d'aide pour VennDiagram et venneuler, et ensuite seulement de demander des informations sur la mise en forme ou d'autres options.

0 votes

@John alors que le venneuler n'a pas d'argument "border", vous pourriez dessiner des cercles basés sur la valeur de l'objet venneuler (vous avez des centres et des diamètres) ce qui ferait une bordure. Je soupçonne que cela ne serait pas très difficile à implémenter dans la fonction, non plus.

0 votes

@Roman: on pourrait utiliser draw.circle() du package plotrix pour les cercles.

55voto

Johan Larsson Points 1964

J'ai récemment publié un nouveau package R, eulerr, qui fait ce que vous voulez. Il est assez similaire à venneuler mais sans ses incohérences.

library(eulerr)
fit <- euler(c(A = 450, B = 1800, "A&B" = 230))
plot(fit)

eulerplot

Ou vous pouvez essayer l'application shiny pour le même package r sur eulerr.co

shiny-euler

5 votes

L'application brillante animée a scellé l'affaire pour moi

1 votes

Excellent paquet. Petit défaut à mon avis est le schéma de couleurs par défaut, qui utilise du blanc pour le premier ensemble et l'arrière-plan, et manque donc de contraste. De plus, le extrait de code fourni ne donne pas le même résultat avec la version récente de R/package.

0 votes

Merci. J'ai mis à jour le code snippet et la figure qu'il génère. Je ne suis pas d'accord avec vous concernant le schéma de couleurs. Le contraste avec l'arrière-plan n'est généralement pas la principale préoccupation et le blanc se marie très bien avec la plupart des autres couleurs et particulièrement l'étiquette sur le cercle.

43voto

jon Points 3438

Basé sur la deuxième réponse de Geek On Acid (merci une fois de plus), j'ai pu résoudre le problème de la ligne également. Je poste ceci au cas où cela serait pertinent pour d'autres googlers !

  require(VennDiagram)
    venn.diagram(list(B = 1:1800, A = 1571:2020),fill = c("red", "green"),
  alpha = c(0.5, 0.5), cex = 2,cat.fontface = 4,lty =2, fontfamily =3, 
   filename = "trial2.emf");

entrer la description de l'image ici

0 votes

Salut, j'utilise vennDiagram(sub, cex=..,lwd=2,circle.col=...) et lorsque j'essaie d'utiliser fill comme tu mentionnes, cela affiche : 1: "fill" n'est pas un paramètre graphique. Est-ce une question de version de vennDiagram ? Connais-tu le bon 'fill' dans ce cas ? Merci beaucoup

0 votes

@PGreen Je viens d'essayer dans R 2.15.2 avec la dernière version de vennDiagram, ça fonctionne pour moi ....

3 votes

@PGreen Je soupçonne que le problème est que vous utilisez vennDiagram du package limma, tandis que jon utilise venn.diagram du package vennDiagram. vennDiagram n'a pas d'argument fill, c'est pourquoi vous obtenez l'erreur.

17voto

ktyagi Points 78

Même si cela ne répond pas complètement à votre question, je pense que cela sera utile pour d'autres personnes cherchant à tracer un diagramme de Venn. On peut utiliser la fonction venn() du package gplots : http://www.inside-r.org/packages/cran/gplots/docs/venn

## modifié légèrement de l'exemple donné dans la documentation
## Exemple utilisant une liste de noms d'éléments appartenant au
## groupe spécifié.
##
require(gplots) 
## construire des noms de gènes factices..
oneName <- function() paste(sample(LETTERS,5,replace=TRUE),collapse="")
geneNames <- replicate(1000, oneName())

## 
GroupA <- sample(geneNames, 400, replace=FALSE)
GroupB <- sample(geneNames, 750, replace=FALSE)
GroupC <- sample(geneNames, 250, replace=FALSE)
GroupD <- sample(geneNames, 300, replace=FALSE)

venn(list(GrpA=GroupA,GrpB=GroupB,GrpC=GroupC,GrpD=GroupD))

entrez la description de l'image ici Ensuite j'ajoute simplement des couleurs et de la transparence en utilisant illustrator. entrez la description de l'image ici

1 votes

Salut! Est-ce que cela te dérangerait d'expliquer ce que tu veux dire en utilisant Illustrator? Veux-tu dire Adobe Illustrator, ou est-il possible de réaliser le diagramme ci-dessus simplement en utilisant R?

2 votes

Désolé pour ma confusion! Je veux dire en utilisant Adobe Illustrator

5voto

Il existe un traceur proportionnel intuitif et flexible que vous pouvez télécharger et exécuter. Trouvez-le à : http://omics.pnl.gov/software/VennDiagramPlotter.php

et

jvenn : un visualiseur interactif de diagramme de Venn - GenoToul Bioinfo : http://bioinfo.genotoul.fr/jvenn/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X