2015-07-20 22 views
5

Mam ramki danych D że wyglądać tak:R ggplot Zmiana koloru jednej zmiennej w skumulowany wykres słupkowy

Track <- c(0,0,0,-1,1,1) 
Length <- c(1,1,2,1,3,1) 
Legend <- c("A","B","A","C","B","C") 
D <- data.frame(Track,Length,Legend) 

D 
# Track Length Legend 
#  0  1  A 
#  0  1  B 
#  0  2  A 
# -1  1  C 
#  1  3  B 
#  1  1  C 

Obecnie używam tego kodu, aby go działki:

ggplot(Z, aes(x=Track, y=Length, fill=Legend)) + 
     geom_bar(stat='identity') + geom_point() + expand_limits(x=0,y=0) + 
     theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
      panel.background = element_blank(), axis.line = element_line(colour = "black")) 

I wykres wygląda tak: enter image description here

Jednak chcę przypisać kolor biały do ​​zmiennej B. Czy ta manipulacja jest możliwa? Dodatkowo używam danych fikcyjnych dla uproszczenia w tym poście. Rzeczywiste dane, które będę używać, mogą mieć 10 lub więcej różnych zmiennych w legendzie, więc wypisanie każdego heksadecymalnego koloru nie wygląda na czystą opcję.

Dziękuję za pomoc

Odpowiedz

2

Czy to produkty co chcesz?

x <- length(levels(factor(Legend))) 
x.colors <- hcl(h=seq(15,375,length=(x+1)),l=65,c=100)[1:x] 
x.colors[x] <- "white" 

ggplot(D, aes(x=Track, y=Length, fill=Legend)) + 
    geom_bar(stat='identity',colour="black") + geom_point() + expand_limits(x=0,y=0) + 
    scale_fill_manual(values=x.colors) + 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     panel.background = element_blank(), axis.line = element_line(colour ="black")) 

Dodałem scale_fill_manual() przypisując kolory do A, B i C. Dodałem także colour="black" do geom_bar(). Możesz spróbować z drugą częścią i bez niej i zobaczyć, co myślisz.

+0

Rzeczywiste dane, których używam, mają wiele zmiennych w ramach Legendy. Nie wydaje mi się, aby lista ponad 10 kolorów dla zmiennych 10+, które mam, jest czysta. Wiem, że ostatnia zmienna zawsze będzie zmienną, którą chcę pokolorować na biało ... @johnson_shuffle – ALKI

+0

Wystarczająco fair. Zobacz moją zredagowaną odpowiedź. Ostatecznie zależy to od tego, ile kontroli chcesz nad innymi kolorami. Nawiasem mówiąc, właśnie dowiedziałem się, jak działa paleta kolorów w 'ggplot()', która jest częścią 'hcl()' powyżej. –

+0

Awesome, to jest idealne! Dzięki – ALKI

2

Można użyć scale_fill_manual (wartości = C (.. i wówczas kolory hex”

ggplot(D, aes(x=Track, y=Length, fill=Legend)) + 
     geom_bar(stat='identity') + scale_fill_manual(values=c("#000000","#FFFFFF", "#00FF00")) 

Ponadto można używać

# The palette with grey: 
cbPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7") 

# The palette with black: 
cbbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7") 

# To use for fills, add 
    scale_fill_manual(values=cbPalette) 

# Use a different gradient 
    scale_colour_gradientn(colours=rainbow(4)) 

    # To use for line and point colors, add 
     scale_colour_manual(values=cbPalette) 
+0

Proszę zobaczyć mój komentarz na temat odpowiedzi johnson_shuffle. @vinchinzu – ALKI

Powiązane problemy