Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

position legend of a stacked bar plot

Tags:

I am trying to create a stacked bar plot, but I cannot position the legend so that it does not overlap any of the bars. I have tried adjusting the margins, setting xlim, using a separate legend statement and searching here, all without success. Indeed, the code for the example data set came from StackOverflow. I am using base R and prefer a base R solution. Thank you for any advice.

setwd('c:/users/mmiller21/simple R programs/')  jpeg(filename = "barplot.jpeg")  set.seed(1234) x <- replicate(8, round(10 * rexp(2000, 10))) y <- apply(x, 2, function(column) table(factor(column, levels = 0:9))) colnames(y) <- paste('A', seq(1,ncol(y),1), sep='') rownames(y) <- paste('R', seq(1,nrow(y),1), sep='') y  #      A1  A2  A3  A4  A5  A6  A7  A8 # R1  769 800 790 806 792 787 834 801 # R2  779 733 793 757 786 744 731 776 # R3  284 297 278 272 263 301 280 275 # R4  112 106  91 124 106 103 104  96 # R5   33  38  37  26  36  37  30  36 # R6   11  18   7  11  10  20  11   9 # R7    8   8   3   2   3   3   9   5 # R8    4   0   1   2   4   4   0   2 # R9    0   0   0   0   0   1   1   0 # R10   0   0   0   0   0   0   0   0  par(mfrow=c(1, 1), mar=c(5, 5, 4, 2) + 0.1) barplot(y, col = 1:nrow(y), ylab="My Variables", legend.text = TRUE,          args.legend = list(x = "topright", bty = "n"))  dev.off() 

enter image description here

like image 920
Mark Miller Avatar asked Sep 08 '13 21:09

Mark Miller


People also ask

How do you move a legend position in R?

You can place the legend literally anywhere. To put it around the chart, use the legend. position option and specify top , right , bottom , or left . To put it inside the plot area, specify a vector of length 2, both values going between 0 and 1 and giving the x and y coordinates.

What is legend in bar plot?

A legend is a tool to help explain a graph. You are most commonly going to want to add one to a bar chart where you have several data series. You'll also want to add one to a line or scatter plot when you have more than one series. Essentially you use a legend to help make a complicated plot more understandable.

Does a bar graph use a legend?

The legend tells us what each bar represents. Just like on a map, the legend helps the reader understand what they are looking at. Legend examples can be found in the second and third graphs above.


2 Answers

How about this:

library(RColorBrewer)  barplot(     y,     xlim=c(0, ncol(y) + 3),     col=brewer.pal(nrow(y), "Paired"),     ylab="My Variables",     legend.text=TRUE,     args.legend=list(       x=ncol(y) + 3,       y=max(colSums(y)),       bty = "n"     ) ) 

enter image description here

like image 156
zero323 Avatar answered Sep 22 '22 21:09

zero323


With margins

par(mfrow=c(1, 1), mar=c(5, 5, 4, 8)) barplot(y, col = 1:nrow(y), ylab="My Variables", legend.text = TRUE,          args.legend = list(x = "topright", bty = "n", inset=c(-0.15, 0))) 
like image 22
P̲̳x͓L̳ Avatar answered Sep 24 '22 21:09

P̲̳x͓L̳