Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

plot stacked bar plot in R

Tags:

plot

r

I would like to create histogram [stacked bar plot] in R with data like this:

Period = c(1,1,2,2,3,3,4,4)                              
Sample = c("A","B","A","B","A","B","A","B")
Value1 = c(3,2,6,7,3,2,1,2)
Value2 = c(1,0,5,2,2,0,2,5)
x <- data.frame(Period,Sample,Value1,Value2)

Is it possible to have "Period" and "Sample" on the X axes and The values ("Value1" and "Value2") in "Stacked Bar Plot". So the hight of first histogram would be 4 (separate for Value1 and Value2) Thank you for your help in advance! Best regards.

like image 959
Eco06 Avatar asked Sep 28 '11 12:09

Eco06


People also ask

How do I plot a bar chart in R?

Bar plots can be created in R using the barplot() function. We can supply a vector or matrix to this function. If we supply a vector, the plot will have bars with their heights equal to the elements in the vector.


2 Answers

You are describing a stacked bar chart, not a histogram. With ggplot you can do it as follows:

library(ggplot2)
library(reshape2)

x <- data.frame(
  Period = c(1,1,2,2,3,3,4,4),
  Sample = c("A","B","A","B","A","B","A","B"),
  Value1 = c(3,2,6,7,3,2,1,2),
  Value2 = c(1,0,5,2,2,0,2,5)
)

mx <- melt(x, id.vars=1:2)
ggplot(mx, aes(x=Period, y=value, fill=variable)) + 
  geom_bar(stat="identity") + 
  facet_grid(~Sample)

enter image description here

like image 149
Andrie Avatar answered Oct 01 '22 14:10

Andrie


It's not as pretty as the ggplot solution but

v <- rbind(Value1,Value2)
barplot(v,beside=FALSE,names=levels(interaction(Period,Sample)),legend=TRUE)

seems to work.

like image 26
Ben Bolker Avatar answered Oct 01 '22 12:10

Ben Bolker