# [R] Stacked Bar

Stephen Tucker brown_emu at yahoo.com
Tue Aug 21 15:04:13 CEST 2007

```I think you want to use the 'density' argument. For example:

barplot(1:5,col=1)
legend("topleft",fill=1,legend="text",cex=1.2)
par(new=TRUE)
barplot(1:5,density=5,col=2)
legend("topleft",fill=2,density=20,legend="text",bty="n",cex=1.2)

(if you wanted to overlay solid colors with hatching)

Here's the lattice alternative of the bar graph, though the help page says
'density' is currently unimplemented (Package lattice version 0.16-2). To get
the legend into columns, I followed the suggestion described here:
http://tolstoy.newcastle.edu.au/R/help/05/04/2529.html

Essentially I use mapply() and the line following to create a list with
alternating 'text' and 'rect' arguments (3 times to get 3 columns).
===
x <- matrix(1:75, ncol= 5)
dimnames(x)[] <- paste("Method", 1:5, sep="")
dimnames(x)[] <- paste("Row", 1:15, sep="")

u <- mapply(function(x,y) list(text=list(lab=x),rect=list(col=y)),
x = as.data.frame(matrix(levels(as.data.frame.table(x)\$Var1),
ncol=3)),
y = as.data.frame(matrix(rainbow(nrow(x)),
ncol=3)),
SIMPLIFY=FALSE)
key <- c(rep=FALSE,space="bottom",unlist("names<-"(u,NULL),rec=FALSE))

barchart(Freq ~ Var2,
data = as.data.frame.table(x),
groups = Var1, stack = TRUE,
col=rainbow(nrow(x)),density=5,
key = key )
===
(I often use tim.colors() in the 'fields' package, if you wanted other ideas
for color schemes).

--- Deb Midya <debmidya at yahoo.com> wrote:

> Jim,
>
>   Thanks for such a quick response. It works well. Is it possible to fill
> the bars with patterns and colours?
>
>   Regards,
>
>   Deb
>
> Jim Lemon <jim at bitwrit.com.au> wrote:
>   Deb Midya wrote:
> > Hi R Users!
> >
> >
> > I am using R-2.5.1 on Windows XP.
> >
> > I am trying to do a stacked bar plot, but could not get through the
> following problem. The code is given below.
> >
> > 1. How can I provide 15 different colors for each method with 15 Rows?
> >
> > 2. How can I put the legend in a particular position (eg., in the top or
> bottom or right or left)? How can I put legend using a number of rows (eg.,
> using two or three rows)?
> >
> Hi Deb,
> As you have probably noticed, the integer coded colors repeat too
> quickly for the number of colors you want. You can use the rainbow()
> function to generate colors like this:
>
> barplot(x,beside=FALSE,col=rainbow(nrow(x)))
>
> or there are lots of other color generating functions in the grDevices
> or plotrix packages. Here's how to get your legend in an empty space for
> your plot. There is also an emptyspace() function in the plotrix package
> that tries to find the biggest empty space in a plot, although it
> probably wouldn't work in this case.
>
> legend(0,1000,rownames(x),fill=rainbow(nrow(x)))
>
> Jim
>
>
>
>
> ---------------------------------
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

____________________________________________________________________________________

Comedy with an Edge to see what's on, when.

```