[R] Barplot w/ single stacked bar

Marc Schwartz marc_schwartz at comcast.net
Thu Jan 24 17:32:25 CET 2008

Muenchen, Robert A (Bob) wrote:
> Hi All,
> I can get the barplot function to do many types of plots, stacked or
> otherwise. However, I cannot get it to do a *single* stacked bar. I've
> searched several books & listserv archives to no avail. I suspect I'm
> missing the obvious from the help file!
> I can reach my goal in ggplot2, although the relative heights of the
> bar's pieces don't seem quite right (it does generate a warning):
> library(ggplot2)
> x<-factor(1)
> y<-factor( c("Male","Male","Female") )
> mydata <- data.frame(x,y)
> rm(x,y)
> mydata
> #These are close to my goal:
> qplot( x, y, fill=y, geom="bar", data=mydata)
> # or
> ggplot(mydata, aes(x=x, y=y, fill=y)) + geom_bar()
> # But this places the bars beside each other rather than stack them.
> barplot( table(mydata$y), beside=FALSE)
> Thanks!
> Bob


Try this:

  barplot(as.matrix(table(mydata$y)), beside = FALSE)

Conceptually, for a stacked bar, each bar is a column in a matrix. The
components in a stacked bar are the row values in the column.

Thus, you need to create a single column matrix from your table.

One might question the value of such a plot however, if the intent is to
provide a visual representation of the difference in counts/proportions
between two groups. A side-by-side barplot or a dotchart would seem to
be better here.


Marc Schwartz

More information about the R-help mailing list