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/