2014-05-09 4 views
17

Mam folder zawierający pliki CSV, każdy z dwoma kolumnami danych npJak zmienić nazwy etykiet, kolejność i kolory box-tick w osi X za pomocą R ggplot?

0,red 
15.657,red 
0,red 
0,red 
4.429,red 
687.172,green 
136.758,green 
15.189,red 
0.152,red 
23.539,red 
0.348,red 
0.17,blue 
0.171,red 
0,red 
61.543,green 
0.624,blue 
0.259,red 
338.714,green 
787.223,green 
1.511,red 
0.422,red 
9.08,orange 
7.358,orange 
25.848,orange 
29.28,orange 

Używam następujący kod R do generowania boxplots:

files <- list.files(path="D:/Ubuntu/BoxPlots/test/", pattern=NULL, full.names=F, recursive=FALSE) 
files.len<-length(files) 
col_headings<-c("RPKM", "Lineage") 

for (i in files){ 
    i2<-paste(i,"png", sep=".") 
    boxplots<-read.csv(i, header=FALSE) 
    names(boxplots)<-col_headings 
    png(i2) 
    bplot<-ggplot(boxplots, aes(Lineage, RPKM)) + geom_boxplot(aes(fill=factor(Lineage))) + geom_point(aes(colour=factor(Lineage))) 
    print(bplot) 
    graphics.off() 
} 

Teraz chcę zmienić kolor boków, aby pasowały do ​​odpowiadających im kolorowych etykiet osi X. Chcę również zmienić nazwy etykiet osi X, a także ich kolejność. Czy istnieje sposób, aby to zrobić, używając ggplot lub qplot?

Odpowiedz

32

Building off odpowiedzi @ Shadow, oto jak można ręcznie zmienić etykiety osi x. Rzuciłem również kilka innych zmian, które pomagają poprawić wygląd wykresu i legendy:

colorder <- c("green", "orange", "red", "blue") 
bplot<-ggplot(temp, aes(Lineage, RPKM)) + 
    geom_boxplot(aes(fill=factor(Lineage))) + 
    geom_point(aes(colour=factor(Lineage))) + 
    scale_color_manual(breaks=colorder, # color scale (for points) 
        limits=colorder, 
        values=colorder, 
        labels=c("hESC1","hESC2","hESC3","hESC4"), 
        name="Group") + 
    scale_fill_manual(breaks=colorder, # fill scale (for boxes) 
        limits=colorder, 
        values=colorder, 
        labels=c("hESC1","hESC2","hESC3","hESC4") 
        name="Group") + 
    scale_x_discrete(limits=colorder,labels=c("hESC1","hESC2","hESC3","hESC4")) + 
    theme_bw() 

Dodanie opcji labels do scale_x_discrete warstwą działki pozwala na zmianę etykiety osi. Dodanie labels do obu scale_fill_manual i scale_color_manual pozwala na zmianę etykiet legendy. Dodanie name do obu pozwala zmienić nagłówek legendy. Na koniec dodałem theme_bw() do wykresu, aby uczynić białe tło i dodać obramowanie wokół wykresu. Mam nadzieję, że pomaga!

enter image description here

6

Tak, możesz to zrobić. Użyj scale_color_manual, scale_fill_manual i scale_x_discrete następująco:

# specify colors and order 
colorder <- c("green", "orange", "red", "blue") 
bplot<-ggplot(boxplots, aes(Lineage, RPKM)) + 
    geom_boxplot(aes(fill=factor(Lineage))) + 
    geom_point(aes(colour=factor(Lineage))) + 
    scale_color_manual(breaks=colorder, # color scale (for points) 
        limits=colorder, 
        values=colorder) + 
    scale_fill_manual(breaks=colorder, # fill scale (for boxes) 
        limits=colorder, 
        values=colorder) + 
    scale_x_discrete(limits=colorder) # order of x-axis 
+0

Działa to na uzyskanie przypisując odpowiednie kolory do boxplots i zmieniając ich kolejność. Jednak chciałbym również zmienić nazwy etykiet osi (np. Zmienić "pomarańczowy" na "hESC") i aby znalazło to odzwierciedlenie w legendzie. – user2639056

+0

@ user2639056 Odpowiedziałem na twoje pytanie poniżej. – rmbaughman