Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change x-axis tick label names, order and boxplot colour using R ggplot?

Tags:

r

ggplot2

boxplot

I have a folder containing csv files, each with two columns of data e.g.:

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

I am using the following R code to generate the 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()
}

Now I want to change the colour of the boxplots to match their corresponding x-axis colour labels. I also want to change the names of the x-axis labels, and also their order. Is there a way to do this using ggplot or qplot?

like image 266
user2639056 Avatar asked May 09 '14 12:05

user2639056


People also ask

How do you change the X axis tick label in R?

Option 1. Set xaxt = "n" and yaxt = "n" to remove the tick labels of the plot and add the new labels with the axis function. Note that the at argument sets where to show the tick marks.

How do I change X label to R in Ggplot?

Changing axis labels To alter the labels on the axis, add the code +labs(y= "y axis name", x = "x axis name") to your line of basic ggplot code. Note: You can also use +labs(title = "Title") which is equivalent to ggtitle .


2 Answers

Building off of @shadow's answer, here's how you can manually change the x-axis labels. I also threw in a couple other changes which help improve the look of the graph and legend:

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

Adding the labels option to the scale_x_discrete layer of the plot allows you to change the axis labels. Adding labels to both scale_fill_manual and scale_color_manual allows you to change the legend labels. Adding name to both lets you change the legend heading. Finally, I added theme_bw() to the plot to make the background white and add a border around the plot. Hope that helps!

enter image description here

like image 161
rmbaughman Avatar answered Oct 22 '22 16:10

rmbaughman


Yes, you can do this. Use scale_color_manual, scale_fill_manual and scale_x_discrete as follows:

# 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
like image 24
shadow Avatar answered Oct 22 '22 18:10

shadow