Hi all, i'm fairly new to R and its graphing, but having unsuccessfully 'googled' and checked this forum to find answer to my problem, i'm posting my question here. I'm trying to plot stacked barplot. I have simple data that looks like this: bg ag 0.41 2.81 0.37 2.91 0.31 2.06 0.32 2.39 every row indicates a factor (1,2,3,4, see below in names.arg). Now when i plot this using following function for stacked barplots: plot<-barplot(t(data), main=txt, ylim=c(0,10), col=c("white", "grey90"), ylab="Total biomass (g)", space=0.1, names.arg=c("1", "2", "3", "4")) i get a lovely stacked graph and it color-codes with white (bg) and grey90 (ag) in each individual stacked bar. I have a total of 4 stacked bars as i have 4 factors. Now here is the question: i would like to add density lines across entire stacked bar or any other graphic feature to distinguish between bars 1 and 2 as they indicate same factor and 3 and 4 that indicate different factor. Is there any way to do that? Surely it's possible, but not so obvious for the beginner =) thank you very much -- View this message in context: http://r.789695.n4.nabble.com/stacked-barplot-colour-coding-tp4280685p4280685.html Sent from the R help mailing list archive at Nabble.com.
acacia21 wrote on 01/09/2012 07:01:28 PM:> Hi all, > i'm fairly new to R and its graphing, but having unsuccessfully'googled'> and checked this forum to find answer to my problem, i'm posting myquestion> here. > > I'm trying to plot stacked barplot. I have simple data that looks likethis:> bg ag > 0.41 2.81 > 0.37 2.91 > 0.31 2.06 > 0.32 2.39 > > every row indicates a factor (1,2,3,4, see below in names.arg). Now wheni> plot this using following function for stacked barplots: > plot<-barplot(t(data), main=txt, ylim=c(0,10), col=c("white", "grey90"), > ylab="Total biomass (g)", space=0.1, names.arg=c("1", "2", "3", "4")) > > i get a lovely stacked graph and it color-codes with white (bg) andgrey90> (ag) in each individual stacked bar. I have a total of 4 stacked barsas i> have 4 factors. Now here is the question: i would like to add densitylines> across entire stacked bar or any other graphic feature to distinguish > between bars 1 and 2 as they indicate same factor and 3 and 4 thatindicate> different factor. Is there any way to do that? Surely it's possible, butnot> so obvious for the beginner =) > > thank you very muchOne workaround is to create a second matrix of data, with zeroes for the bars where you don't want to add emphasis. Then, overlay a second bar plot with density lines for emphasis. df <- data.frame(bg=c(0.41, 0.37, 0.31, 0.32), ag=c(2.81, 2.91, 2.06, 2.39)) # matrix for full barplot m <- t(df) # matrix for subset of barplot to add angled lines to mlines <- m mlines[, 3:4] <- 0 barplot(m, space=0.1, col=c("white", "grey90"), ylim=c(0, 10), ylab="Total biomass (g)", names.arg=c("1", "2", "3", "4")) barplot(mlines, space=0.1, col="black", density=10, angle=35, add=TRUE) Jean P.S. You should avoid creating objects that have the same names as currently existing functions, e.g., "data" and "plot". [[alternative HTML version deleted]]
This graph would be easier under lattice graphics. biomass <- data.frame(bg=c(0.41, 0.37, 0.31, 0.32), ag=c(2.81, 2.91, 2.06, 2.39)) b2 <- stack(biomass) names(b2) <- c("mass", "type") b2$type <- factor(b2$type, levels=c("bg","ag")) b2$AB <- rep(c("A","A","B","B"), 2) b2$location <- rep(1:4, 2) b2 barchart(mass ~ location | AB, group=type, data=b2, horizontal=FALSE, stack=TRUE, col=c("white", "grey90"), scales=list(x=list(relation="sliced")), ylim=c(0, 10), ylab="Total biomass (g)") I did several things above. First, I gave the data frame a name that has some semblance of what the data is (I don't know more about it, but you can do even better with an appropriate name). Second, I recognize that there are three factors---using the technical definition of a factor. You were using the term factor very informally and inconsistently. You said that there are four factors and also that there are two factors. I interpret that as the factor location with 4 levels, and the factor AB with two levels. You also have the factor type with two levels, these are the columns of your original data organization. I invented the names location, AB, and type. You can pick more appropriate names. Third, since you want to distinguish the AB levels, I did it graphically by putting them in separate panels. I suggest you learn lattice graphics. Rich On Mon, Jan 9, 2012 at 8:01 PM, acacia21 <chrissu21@hotmail.com> wrote:> Hi all, > i'm fairly new to R and its graphing, but having unsuccessfully 'googled' > and checked this forum to find answer to my problem, i'm posting my > question > here. > > I'm trying to plot stacked barplot. I have simple data that looks like > this: > bg ag > 0.41 2.81 > 0.37 2.91 > 0.31 2.06 > 0.32 2.39 > > every row indicates a factor (1,2,3,4, see below in names.arg). Now when i > plot this using following function for stacked barplots: > plot<-barplot(t(data), main=txt, ylim=c(0,10), col=c("white", "grey90"), > ylab="Total biomass (g)", space=0.1, names.arg=c("1", "2", "3", "4")) > > i get a lovely stacked graph and it color-codes with white (bg) and grey90 > (ag) in each individual stacked bar. I have a total of 4 stacked bars as i > have 4 factors. Now here is the question: i would like to add density lines > across entire stacked bar or any other graphic feature to distinguish > between bars 1 and 2 as they indicate same factor and 3 and 4 that > indicate > different factor. Is there any way to do that? Surely it's possible, but > not > so obvious for the beginner =) > > thank you very much > > > -- > View this message in context: > http://r.789695.n4.nabble.com/stacked-barplot-colour-coding-tp4280685p4280685.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]