2017-02-08 9 views
6
library(ggplot2) 
p <- ggplot(mtcars, aes(wt, mpg)) 
p + geom_point(size=4) 

Załóżmy, że masz powyższe scatterplot. W jaki sposób można określić, że punkty, które są >= 25 mpg zostaną wykreślone: ​​, jeden between 20 and 25green i green i green i ?Sposób określania różnych kolorów za pomocą ggplot

Czy można to zrobić konkretnie pod numerem ggplot?

Odpowiedz

6

Można to zrobić na dwa kroki:

Najpierw definiujesz grupy, które powinny mieć różne kolory; albo przez dodanie kolejnej kolumny do ramki danych lub wewnątrz aes. Użyję aes tutaj:

aes(wt, mpg, color = cut(mpg, breaks = c(0, 20, 25, Inf))) 

drugie, określając ręcznej koloru lub wypełnienie skali:

scale_color_manual(values = c('blue', 'green', 'red'), 
        limits = c('(0,20]', '(20,25]', '(25,Inf]')) 

ten określa, jakie kolory użyć (values) i które etykiety przypisać im (limits); są to nazwy grup generowanych przez cut.

Reasumując:

ggplot(mtcars) + 
    aes(wt, mpg, color = cut(mpg, breaks = c(0, 20, 25, Inf))) + 
    geom_point(size = 4) + 
    scale_color_manual(values = c('blue', 'green', 'red'), 
         limits = c('(0,20]', '(20,25]', '(25,Inf]')) 

Można poprawić tytuł legendy, dodając grupy jako oddzielnej kolumnie do swoich danych, albo poprzez zapewnienie połączenia guides funkcję:

guides(color = guide_legend(title = 'mpg range')) 
+1

bardzo pomocne rozwiązanie! Dziękuję za Twój czas :) – Pavlos

2

Oczywiście może, mimo że ten rodzaj pracy prawdopodobnie najlepiej sprawdzi się przy pracy z ramką danych przed ggplot(). Można użyć ifelse() tak:

library(ggplot2) 
p <- ggplot(mtcars, aes(wt, mpg)) 
library(ggplot2) 
p <- ggplot(mtcars, aes(wt, mpg)) 
p + geom_point(size=4, aes(color = ifelse(mpg > 25, ">25", 
            ifelse(mpg > 20, "<20", "20-25")))) + 
    scale_color_manual(values = c(">25" = "red", "<20" = "blue", "20-25" = "green"), 
         name = "MPG") 

enter image description here

Nie trzeba zadzwonić guides() stworzyć tytuł można przekazać je do name = .. argumentu w scale_color_manual()

+2

ostrożny: kolor nazwy w kodzie nie odpowiadają kolorom na wykresie. To czysty zbieg okoliczności, że są one mniej więcej takie same (w rzeczywistości nie pasują, są niedopasowane). –

+1

Spróbuj dodać '+ scale_colour_manual (values ​​= c (" czerwony "=" czerwony "," niebieski "=" niebieski "," zielony "=" zielony "))), aby uniknąć problemu, o którym wspomniał JonathanRudolph. Spróbuj także utworzyć zmienną 'color' jako kolumnę zestawu danych, aby mieć lepszą legendę/tytuł. – AntoniosK

+0

dzięki za opinie facetów, użyłem część z was sugestie/krytyków, aby zaktualizować – Nate