Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Common legend for multiple plots in R

Tags:

I am using R and Latex together to draw some plots and am trying to make a common legend for all of them.

I have six separate plots on the same page. I made each plot separately in R and then displayed them on the same page using \includegraphics in Latex.

Each graph has the same legend information, so rather than having a legend in each plot I would like to have one horizontal legend on display at the bottom of page. Unfortunately, I can't figure out how to make a legend without a plot. Once I have a separate image for the legend, I will know how to include it at the bottom of the page using Latex.

The code I am trying to use to make the legend is

plot(1, type = "n", axes=FALSE, xlab="", ylab="") plot_colors <- c("blue","black", "green", "orange", "pink")  legend(.6,1.3,legend = c("Fabricated Metal", "Iron and Steel", "Paper",  "Beverages", "Tobacco"),         col=plot_colors, lwd=5, cex=.5, horiz = TRUE) 

But, the font is too small and the side of the legend box is cut off.

like image 511
user1288578 Avatar asked Apr 30 '12 20:04

user1288578


2 Answers

A simple example of what I was talking about:

m <- matrix(c(1,2,3,4,5,6,7,7,7),nrow = 3,ncol = 3,byrow = TRUE)  layout(mat = m,heights = c(0.4,0.4,0.2))  for (i in 1:6){     par(mar = c(2,2,1,1))     plot(runif(5),runif(5),xlab = "",ylab = "") }   plot(1, type = "n", axes=FALSE, xlab="", ylab="") plot_colors <- c("blue","black", "green", "orange", "pink") legend(x = "top",inset = 0,         legend = c("Fabricated Metal", "Iron and Steel", "Paper","Beverages", "Tobacco"),          col=plot_colors, lwd=5, cex=.5, horiz = TRUE) 

enter image description here

like image 117
joran Avatar answered Sep 30 '22 20:09

joran


Try this,

plot_colors <- c("blue","black", "green", "orange", "pink") text <- c("Fabricated Metal", "Iron and Steel", "Paper",  "Beverages", "Tobacco") plot.new() par(xpd=TRUE) legend("center",legend = text, text.width = max(sapply(text, strwidth)),        col=plot_colors, lwd=5, cex=1, horiz = TRUE) par(xpd=FALSE) 
like image 22
baptiste Avatar answered Sep 30 '22 19:09

baptiste