2012-01-03 9 views
46

Ho i seguenti tipi di dati di conteggio.Diagramma di Venn proporzionale e ombreggiatura del colore con semitrasparenza

A 450 
B 1800 
A and B both 230 

Voglio sviluppare un colorato (possibilmente semitrasparente alle intersezioni) come il seguente diagramma di Venn.

enter image description here

Nota: Questa figura è un esempio disegnata a mano in PowerPoint, e non è in scala.

+0

Perché non iniziare con 'biblioteca ("SOS"); findFn ("venn") 'e vedi quanto ti porta lontano? –

+0

Oppure utilizzare il pacchetto * come * collocato lo fa –

risposta

45

Ecco un post che parla di Venn diagram from list of clusters and co-occurring factors.

Per facile soluzione Uso pacchetto venneuler:

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

enter image description here

Per soluzioni più avanzate e personalizzate controllare pacchetto VennDiagram.

+0

È possibile mostrare le linee rilegate in nero? Thnaks per la soluzione .. – jon

+0

@John: una buona forma è la prima a leggere attentamente i file di aiuto di VennDiagram e di comeuler, e solo dopo chiedere informazioni sulla formattazione o altre opzioni. –

+0

@John mentre il 'dieduler' non ha un argomento" border ", puoi disegnare cerchi in base al valore dell'oggetto' dieduler' (hai centri e diametri) che creerebbe un bordo. Sospetto che non sia così difficile da implementare nella funzione. –

39

Sulla base di una seconda risposta di Geek On Acid secondo suggerimento (ancora una volta, grazie) avrei anche potuto risolvere il problema della linea. Sto postando se questo è rilevante per altri googler!

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

enter image description here

+0

Ciao, sto usando 'vennDiagram (sub, cex = .., lwd = 2, circle.col = ...) 'e quando provo' fill' come si cita, richiede: 1: '" fill "non è un parametro grafico' È una questione di versione di vennDiagram? Hai il diritto 'riempire' in questo caso? Grazie mille – PGreen

+0

@PGreen Ho appena provato in R 2.15.2 con l'ultima versione di vennDiagram funziona per me .... – jon

+3

@PGreen Ho il sospetto che il problema è che stai usando vennDiagram dal pacchetto limma, mentre jon sta usando venn. diagramma dal pacchetto vennDiagram. vennDiagram non ha un argomento di riempimento, motivo per cui stai ricevendo l'errore. – sage88

11

Anche se questo doesnt rispondere completamente alla tua domanda. Ho pensato che questo sarebbe stato utile per altre persone che cercavano di complottare Venn Diagram. Si può utilizzare la funzione di Venn() dal pacchetto gplots: http://www.inside-r.org/packages/cran/gplots/docs/venn

## modified slightly from the example given in the documentation 
## Example using a list of item names belonging to the 
## specified group. 
## 
require(gplots) 
## construct some fake gene names.. 
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)) 

enter image description here In seguito ho solo aggiungere colori e la trasparenza usando illustratore. enter image description here

+1

Ciao! Ti dispiacerebbe ricorrere a ciò che intendi usando l'illustratore? Intendi Adobe Illustrator, o c'è un modo per ottenere il diagramma sopra usando solo R? –

+1

Scusate il mio male! Voglio dire usare Adobe Illustrator – ktyagi

3

So che l'OP chiede una soluzione in R ma vorrei indicare una soluzione basata sul Web denominata BioVenn. Esso prende ai 3 elenchi di elementi e disegna un diagramma di Venn modo che ciascuna superficie è proporzionale al numero di elementi - come questo:

enter image description here

In questo diagramma ho cambiato manualmente (tramite PhotoShop) il posizionamento dei numeri in quanto non mi piacevano i luoghi scelti da BioVenn. Ma puoi scegliere di non avere numeri.

In teoria, gli elenchi utilizzati con BioVenn devono essere costituiti da ID di geni ma, in pratica, non importa: gli elenchi devono semplicemente contenere stringhe.

+2

"In questo diagramma ho modificato manualmente (tramite PhotoShop) il posizionamento dei numeri perché non mi piacevano i luoghi scelti da BioVenn, ma puoi scegliere di non avere numeri." In realtà, in BioVenn puoi semplicemente trascinare e rilasciare i numeri ovunque desideri. Non è necessario il PhotoShop :-) –

19

Ho recentemente pubblicato un nuovo pacchetto R, eulerr, che fa ciò che si desidera. È abbastanza simile a trovatore, ma senza le sue incongruenze.

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

eulerplot

Oppure si potrebbe provare l'applicazione lucido per lo stesso pacchetto r al eulerr.co

shiny-euler

+0

L'app animata lucida ha sigillato l'offerta per me – Megatron

+1

Pacchetto eccellente. Difetto minore imho è lo schema di colori predefinito, che utilizza il bianco per il primo set e lo sfondo, e quindi manca di contrasto. Anche lo snippet di codice fornito non sta dando lo stesso risultato con la versione R/package recente. –

+0

Grazie. Ho aggiornato lo snippet di codice e la figura che genera. Non sarei d'accordo con te per quanto riguarda la combinazione di colori.Il contrasto con lo sfondo di solito non è la preoccupazione principale e contrasti bianchi molto bene con la maggior parte degli altri colori e in particolare l'etichetta sul cerchio. –