13.2 Bar plots
A bar chart or bar plot displays rectangular bars with lengths proportional to the values that they represent.
- A simple bar plot :
# Create a vector <- rep(x=c("PhDstudent", "Postdoc", "Technician", "PI"), mycenter times=c(8,10,5,2)) # Count number of occurrences of each character string <- table(mycenter) mytable # Bar plot using that table barplot(height=mytable)
- Customize a bit :
- col : color
- main : title of the plot
- las : orientation of axis labels:
- 0: all labels parallel to axis
- 1: x-axis labels parallel / y-axis labels perpendicular
- 2: both labels perpendicular
- 3: x-axis labels perpendicular / y-axis labels parallel
barplot(height=mytable, col=1:4, main="bar plot", las=2)
- Customize the ordering of the bars :
By default, the bars are organized in alphabetical order. You can change it using an ordered factor.
# Create an ordered factor out of mycenter: the order in which you write the "levels" is the sort in which the bars will next be plotted <- factor(x=mycenter, xfact levels=c("PhDstudent", "Postdoc", "Technician", "PI"), ordered=TRUE) # Produce the table <- table(xfact) xfacttable # Plot the same way barplot(height=xfacttable, col=1:4, main="reorganized bar plot", las=2)
- We can also produce stacked barplot :
# Create a matrix containing the number and type of employees per research program : <- matrix(c(8, 10, 9, 2, 6, 4, 5, 3, 14, 13, 16, 4, 11, 10, 8, 5), barmat nrow=4, dimnames=list(c("Technician", "PhDstudent", "PostDoc", "PI"), c("BG", "CDB", "GRSCC", "SB"))) # Plot barplot barplot(height=barmat, col=sample(colors(), 4))
- Add some parameters:
# set a random color vector # add set.seed(38) (or any other number) to reproduce the randomization. <- sample(x=colors(), mycolors size=4) # plot barplot # ylim sets the lower and upper limit of the y-axis: here it allows us to fit the legend ! barplot(height=barmat, col=mycolors, ylim=c(0,50), main="stacked barplot")
- Add a legend to the plot:
- “x” and “y” set the legend’s position in the plotting area: you can specify the position as coordinates using “x” and “y.”
- if “x” only is used, you can set the legend position as “topleft,” “bottomleft,” “topright,” “bottomright”
barplot()(or any other plot function) has to be called first
barplot(height=barmat, col=mycolors, ylim=c(0,50), main="stacked barplot") legend(x="topleft", legend=c("Technician", "PhDstudent", "PostDoc", "PI"), fill=mycolors)
A more automated way to do this:
legend(x="topleft", legend=rownames(barmat), fill=mycolors)
The dataset chickwts is also a built-in dataset from the
datasets package: the table measures and compares the effectiveness of various feed supplements on the growth rate of chickens.
- Create a barplot of the different feed supplements.
- Change the orientation of the x-axis labels.
- Try to re-organize the bars by the increasing number of feed supplements.
# Create a barplot of the different **feed supplements**. <- table(chickwts$feed) tablefeed barplot(tablefeed) # Change the orientation of the x-axis labels. barplot(tablefeed, las=2) # Try to re-organize the bars by the increasing number of feed supplements. # check tablefeed and write the feed categories in increasing order: <- factor(x=chickwts$feed, levels=c("horsebean", "meatmeal", "casein", "linseed", "sunflower", "soybean"), feedfactor ordered=TRUE)) # a less "manual" way to proceed: tablefeed (the output of table() ) is a NAMED vector: sort it and retrieve its names in sorted order sort(tablefeed) names(sort(tablefeed)) <- factor(x=chickwts$feed, feedfactor levels=names(sort(tablefeed)), ordered=TRUE) # plot sorted barplot barplot(table(feedfactor), las=2)