2013-08-28 15 views
6

Mam ramki danych jak tenggplot zestaw scale_color_gradientn ręcznie

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 

i chcę wykreślić BP przeciwko log10, oraz kolorowe punkty R2. R2 są wartościami ciągłymi od 0-1.

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

Jak dotąd, tak dobrze. Chciałbym jednak wyświetlić kolory R2 w ręcznie wybranych odstępach i kolorach, tak jak to (jeśli miałem dyskretne wartości).

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 

To wygląda ładnie, ale wolałbym ustawić kolory siebie.

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

Tak, jak można ręcznie wybrać odstępy od wartości ciągłych (1-0.8, 0.8-0.6, 0.6-0.4, 0.4-0.2, 0.2-0) i pokolorować je do mojego gustu (czerwony, żółty , zielony, jasny, ciemny niebieski)? Gładki gradient pomiędzy kolorami byłby chłodny, ale nie kluczowy.

Odpowiedz

7

Możesz użyć scale_colour_gradientn(), a następnie podać własne colours= i values=. Wartości będą podawać odstępy dla każdego koloru.

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

Wielkie dzięki Didzis, że całkowicie rozwiązuje to! Masz również rozwiązanie bez gradientów, a więc wszystkie wartości od 1-0,8 = czerwony, 0,8-0,6 = żółty i tak dalej? – user2724998

+0

Następnie należy podzielić dane w odstępach przy użyciu funkcji cut() i wykorzystać te przedziały jako wartości dyskretne. –

+0

OK, jeszcze raz dziękuję! – user2724998

3

Po 4 lata komentarz do tej wiadomości: Ważne jest, aby pamiętać, że „wartości” mapować wartości zmiennych między 0 a 1, gdzie 0 oznacza najniższy i 1 najwyższa wartość. W tym przykładzie przypadkowo pasuje do wartości zmiennej, która wynosi od 0 do 1. (Mam nadzieję, że nie mówię nonsensu, ale przynajmniej w moim małym doświadczeniu tak jest)