2012-05-02 3 views
0

J'ai les données suivantes:VennDiagram pour les données donne une erreur?

Set1 : 82 
Set2 : 44 
Set3 : 56 
Set4 : 53 
1,2  : 27 
1,3  : 37 
1,4  : 30 
2,3  : 22 
2,4  : 14 
3,4  : 19 
1,2,3 : 18 
1,2,4 : 13 
1,3,4 : 20 
2,3,4 : 11 
1,2,3,4 : 11 

1,2 signifie Set1 . intersection . Set2, et ainsi de suite ...

Lorsque je tente de faire pour ce Diagrammes d'Euler ensemble de données à l'aide draw.quad.venn, je reçois l'erreur suivante,

Error in draw.quad.venn(82, 44, 56, 53, 27, 37, 30, 22, 14, 19, 18, 13, : 
Impossible: partial areas negative 

Je ne comprends pas ce que je fais mal?

MISE À JOUR:

Ce qui suit est la ligne de commande que je l'ai utilisé:

v.all <- draw.quad.venn(82, 44, 56, 53, 27, 37, 30, 22, 14, 19, 18, 13, 20, 11, 10, category = c("Set1", "Set2", "Set3", "Set4"), fill=c("red", "blue", "orange", "green"), cex = 0.75, cat.cex=0.85) 

Fait intéressant, quand j'utilise

v <- venneuler(c(A=82, B=44, C=56, D=53, "A&B"=27, "A&C"=37, "A&D"=30, "B&C"=22, "B&D"=14, "C&D"=19, "A&B&C"=18, "A&B&D"=13, "A&C&D"=20, "B&C&D"=11, "A&B&C&D"=11)) 
plot(v) 

Il fonctionne !!

enter image description here

Alors maintenant, je suis vraiment confus.

+1

Vous devez a) Afficher le code que vous utilisez pour appeler 'draw.quad.venn' (comment pourrions-nous savoir si vous l'appelez à tort?) Et b) utiliser' dput' pour afficher une version reproductible de ces données (que nous pouvons mettre dans notre propre code pour tester) –

+0

est 'set1 83' l'espace total pour l'ensemble un? ou l'espace total sans chevauchement pour set1? Si c'est l'espace total, il est inférieur à la zone qu'il chevauche avec les ensembles 2,3 et 4. –

+0

@ user1317221 il n'y a rien de mal à 82 étant l'espace total, puisque 2,3,4 sont non-disjoints. Mon pari, n'ayant pas vu '? Draw.quad.venn' est que ses arguments sont dans le mauvais ordre ou (en prenant votre indice) la fonction veut des espaces non superposés, pas des espaces totaux. –

Répondre

1

Les contraintes dans le code sont simples . Ici c'est exactement;

 if (any(a1 < 0, a2 < 0, a3 < 0, a4 < 0, a5 < 0, a6 < 0, a7 < 
      0, a8 < 0, a9 < 0, a10 < 0, a11 < 0, a12 < 0, a13 < 0, 
      a14 < 0, a15 < 0)) { 
      stop("Impossible: partial areas negative") 
     } 
1

Sans votre code, il est difficile d'aider. Il est possible qu'il soit impossible de dessiner vos données en raison de la façon dont il est censé se chevaucher. Peut-être avez-vous des erreurs dans les données?

Toutefois, si elle est un problème de code, en utilisant certaines de vos données et un autre paquet, je peux vous proposer un itinéraire alternatif:

require(venneuler) 
m <- as.matrix(c(
0, 27, 37, 30, 
27, 0, 22, 14, 
37 ,22, 0, 19, 
30,14,19,0)byrow=T,nrow=3) 
v = venneuler(m) 
plot(v) 

qui donne gives: http://i48.tinypic.com/15qdg1u.png

+1

+1 pour une belle parcelle. Je ne savais pas à propos de ce paquet. – Mikko