2013-08-28 13 views
6

Ho un frame di dati come questoggplot set scale_color_gradientn manualmente

BP  R2  LOG10 
96162057 0.2118000 2.66514431 
96162096 0.0124700 0.31749391 
96162281 0.0008941 0.07012148 
96163560 0.5011000 2.48505399 
96163638 0.8702000 3.37778598 

e voglio tracciare BP contro LOG10, e colorare i punti da R2. R2 sono valori continui da 0-1.

myplot <- read.cvs("mytable.csv",head=TRUE) 
attach(myplot) 
ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() 

Finora, tutto bene. Tuttavia mi piacerebbe visualizzare i colori R2 in intervalli e colori selezionati manualmente, come questo (se avessi valori discreti).

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() + 
     scale_color_manual(breaks= c("1","0.8","0.6","0.4","0.2","0"), 
       values = c("red","yellow","green","lightblue","darkblue")) 
Error: Continuous value supplied to discrete scale 

Questo sembra carino, ma preferirei impostare i colori da solo.

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point(shape=1) + 
       scale_colour_gradientn(colours = rainbow(10)) 

Così, come posso selezionare manualmente gli intervalli di valori continui (1-0.8, 0.8-0.6, 0.6-0.4, 0.4-0.2, 0,2-0), e colorarli per i miei gusti (rosso, giallo , verde, chiaro, blu scuro)? Un gradiente uniforme tra i colori sarebbe bello, ma non cruciale.

risposta

7

È possibile utilizzare scale_colour_gradientn() e quindi fornire il proprio colours= e values=. I valori forniranno intervalli per ciascun colore.

ggplot(myplot,aes(BP,LOG10, color=R2)) + geom_point() + 
    scale_colour_gradientn(colours = c("red","yellow","green","lightblue","darkblue"), 
         values=c(1.0,0.8,0.6,0.4,0.2,0)) 

enter image description here

+0

Grazie mille Didzis, che lo risolve completamente! Hai anche una soluzione senza sfumature, quindi preferisci tutti i valori da 1 a 0,8 = rosso, 0,8-0,6 = giallo e così via? – user2724998

+0

Quindi è necessario dividere i dati in intervalli usando la funzione cut() e utilizzare tali intervalli come valori discreti. –

+0

Ok, grazie ancora! – user2724998

3

Dopo 4 anni un commento a questo post: E 'importante notare che i "valori" mappa tuoi valori variabili tra 0 e 1, 0 essendo il più basso e 1 il valore più alto. In questo esempio coincide perfettamente con i valori della variabile che sono da 0 a 1. (spero che non dica sciocchezze, ma almeno nella mia piccola esperienza questo è il caso)