2015-04-30 12 views
14

Usiłuję wykreślić punkty danych z trzech różnych kolorach dla trzech zakresów wartości. Npggplot geom_point() z kolorami na podstawie konkretnych, dyskretnych wartości

library(ggplot2) 
ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(colour = qsec)) 

Powyższy sporządza:

enter image description here

Teraz chciałbym zmodyfikować, tak aby qseq wartości < 17 są czarne, wartości od 17 do 19 są żółty, a wartości powyżej 19 są czerwone. Próbowałem różnych podejść, ale żaden z nich nie wydaje się działać:

  • Zrobione z here

    ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(fill = qsec)) + 
    scale_fill_gradientn(colours=c("black","yellow","red"), 
    breaks=c(0,17,19), labels=format(c("0","17","19"))) 
    

    ta produkuje:

    enter image description here

    Tak więc, wydaje się poprawna colorbar ale kolory nie są faktycznie stosowane.

  • Rozwiązania podane w ggplot2 heatmap with colors for ranged values wydają się obiecujące, ale nie mogę ich zmusić do pracy z geom_point().

  • samo dotyczy różnych podobnych stanowiskach, takich jak te wymienione w pasku bocznym.

Zdaję sobie sprawę, będę pewnie musiał użyć jakiegoś dyskretnego skali zamiast scale_fill_gradientn ale moje próby wykorzystania scale_color_manual() fail:

ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(color = factor(qsec))) + 
scale_color_manual(values=c("black", "yellow","red") 
Error: Insufficient values in manual scale. 30 needed but only 4 provided. 

Domyślam będę jakoś trzeba używać cut() lub factor() ale nie potrafię zrozumieć, jak to zrobić. Jakieś sugestie?

Odpowiedz

22

Trzeba cut swoje wartości w przedziałach:

library(ggplot2) 
ggplot(mtcars, aes(wt, mpg)) + 
    geom_point(aes(colour = cut(qsec, c(-Inf, 17, 19, Inf))), 
      size = 5) + 
    scale_color_manual(name = "qsec", 
        values = c("(-Inf,17]" = "black", 
            "(17,19]" = "yellow", 
            "(19, Inf]" = "red"), 
        labels = c("<= 17", "17 < qsec <= 19", "> 19")) 

resulting plot

+0

Hi @roland Czy ustawienie to scale_color_manual bieg z geom_line? – pacomet

+0

Skala kolorów jest stosowana do wszystkich geomów, dla których mapowany jest kolor. – Roland

+0

Próbowałem dostosować kod do moich danych, ale nie udało mi się. To, czego potrzebuję, to pokolorowanie pojedynczej geom_line() w zależności od wartości y. Ten obraz (https://www.dropbox.com/s/du6fjvr71vybhuu/Rplot.png?dl=0) pokazuje, czego szukam. Może powinienem otworzyć pytanie. – pacomet