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 ========================================================Bob Muenchen (pronounced Min'-chen), Manager Statistical Consulting Center U of TN Office of Information Technology 200 Stokely Management Center, Knoxville, TN 37996-0520 Voice: (865) 974-5230 FAX: (865) 974-4810 Email: muenchen at utk.edu Web: http://oit.utk.edu/scc, News: http://listserv.utk.edu/archives/statnews.html =========================================================
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! > BobBob, 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. HTH, Marc Schwartz
> 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) > mydataOoops! There was a bug in stat_bin that occurred when there was a single categorical x value. It'll be fixed in the next version. Hadley -- http://had.co.nz/