Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to put ggplot2 legend in two columns for an area plot

Tags:

plot

r

ggplot2

I would like to put a long legend into two columns and I am not having any success. Here's the code that I'm using with the solution found elsewhere which does not work for geom='area', though it works for my other plots. The plot that I do get from the code below looks like:single column legend

So how do I plot Q1 with the legend in two columns please?

NVER <- 10
NGRID <- 20
MAT <- matrix(NA, nrow=NVER, ncol=NGRID)
gsd <- 0.1  # standard deviation of the Gaussians

verlocs <- seq(from=0, to=1, length.out=NVER)
thegrid <- seq(from=0, to=1, length.out=NGRID)
# create a mixture of Gaussians with modes spaced evenly on 0 to 1
# i.e. the first mode is at 0 and the last mode is at 1
for (i in 1:NVER) {
  # add the shape of gaussian i
  MAT[i,] <- dnorm(thegrid, verlocs[[i]], sd=gsd)
}
M2 <- MAT/rowSums(MAT)
colnames(M2) <- as.character(thegrid)
# rownames(M2) <- as.character(verlocs)
library(reshape2)
D2 <- melt(M2)
# head(D2)
# str(D2)
D2$Var1 <- ordered(D2$Var1)
library(ggplot2)
Q1 <- qplot(Var2, value, data=D2, order=Var1, fill=Var1, geom='area')
Q1
# ggsave('sillyrainbow.png')
# now try the stackoverflow guide() solution
Q1 + guides(col=guide_legend(ncol=2))  # try but fail to put the legend in two columns!

Note that the solution in creating columns within a legend list while using ggplot in R code is incorporated above and it does not work unfortunately!

like image 989
Sean Avatar asked Dec 31 '14 15:12

Sean


1 Answers

You are referring to the wrong guide.

Q1 + guides(fill=guide_legend(ncol=2))

resulting plot

like image 55
Roland Avatar answered Oct 05 '22 07:10

Roland