2014-05-09 7 views
17

Ho una cartella contenente i file CSV, ciascuna con due colonne di dati ad esempio:Come modificare i nomi delle etichette di graduazione sull'asse x, l'ordine e il colore del riquadro con l'immagine usando 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 

Sto usando il seguente codice R per generare i grafici a scatole:

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() 
} 

Ora voglio cambiare il colore dei riquadrati per abbinare le loro etichette di colore dell'asse x corrispondente. Voglio anche cambiare i nomi delle etichette dell'asse xe il loro ordine. C'è un modo per farlo usando ggplot o qplot?

risposta

32

Costruzione off di risposta @ dell'ombra, ecco come è possibile modificare manualmente le etichette dell'asse x. Ho anche buttato in un paio di altre modifiche che contribuiscono a migliorare l'aspetto del grafico e leggenda:

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() 

Aggiunta l'opzione labels alla scale_x_discrete livello della trama consente di modificare le etichette degli assi. L'aggiunta di labels a entrambi gli standard scale_fill_manual e scale_color_manual consente di modificare le etichette delle legende. L'aggiunta di name a entrambi consente di modificare l'intestazione della legenda. Infine, ho aggiunto theme_bw() alla trama per rendere lo sfondo bianco e aggiungere un bordo attorno alla trama. Spero possa aiutare!

enter image description here

6

Sì, puoi farlo. Utilizzare scale_color_manual, scale_fill_manual e scale_x_discrete come segue:

# 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

Questo funziona per ottenere l'assegnazione i colori corretti per i grafici a scatole e cambiare il loro ordine. Tuttavia, desidero anche modificare i nomi delle etichette degli assi (ad esempio, cambiare "orange" in "hESC") e far sì che questo si rifletta nella legenda. – user2639056

+0

@ user2639056 Ho risposto alla tua domanda di seguito. – rmbaughman

Problemi correlati