R folded bar graph with geom_text graphics

I am trying to plot a histogram in R using ggplot. I also want to include the percentage in each piece of bars for this part. I tried to follow messages 1 , 2 , 3 , but the values ​​do not match their respective blocks. My data is a file in dropbox .

My code is as follows:

f<-read.table("Input.txt", sep="\t", header=TRUE) ggplot(data=f, aes(x=Form, y=Percentage, fill=Position)) + geom_bar(stat="identity", colour="black") + geom_text(position="stack", aes(x=Form, y=Percentage, ymax=Percentage, label=Percentage, hjust=0.5)) + facet_grid(Sample_name ~ Sample_type, scales="free", space="free") + opts(title = "Input_profile", axis.text.x = theme_text(angle = 90, hjust = 1, size = 8, colour = "grey50"), plot.title = theme_text(face="bold", size=11), axis.title.x = theme_text(face="bold", size=9), axis.title.y = theme_text(face="bold", size=9, angle=90), panel.grid.major = theme_blank(), panel.grid.minor = theme_blank()) + scale_fill_hue(c=45, l=80) ggsave("Output.pdf") 

Exit -

enter image description here

Any help is appreciated. Thanks for the help and time!

+8
r ggplot2
source share
2 answers

I think you are using an older version of ggplot2 . Since your code has changed for ggplot2 v 0.9.3, I get the following:

 p <- ggplot(data = df, aes(x = Form, y = Percentage, fill = Position)) p <- p + geom_bar(stat = "identity", colour = "black") p <- p + geom_text(position = "stack", aes(x = Form, y = Percentage, ymax = Percentage, label = Percentage, hjust = 0.5)) p <- p + facet_grid(Sample_name ~ Sample_type, scales="free", space="free") p <- p + theme(plot.title = element_text("Input_profile"), axis.text.x = element_text(angle = 90, hjust = 1, size = 8, colour = "grey50"), plot.title = element_text(face="bold", size=11), axis.title.x = element_text(face="bold", size=9), axis.title.y = element_text(face="bold", size=9, angle=90), panel.grid.major = element_blank(), panel.grid.minor = element_blank()) p <- p + scale_fill_hue(c=45, l=80) p 

ggplot2_text_placement

You see that text objects are usually placed correctly. There are places where the bars are too short, so the numbers overlap. You can also play with the size parameter.

To fix this, you could do something like this to add numbers yourself.

 df <- ddply(df, .(Form, Sample_type, Sample_name), transform, cum.perc = Reduce('+', list(Percentage/2,cumsum(c(0,head(Percentage,-1)))))) p <- ggplot(data = df, aes(x = Form, y = Percentage, fill = Position)) p <- p + geom_bar(stat = "identity", colour = "black") p <- p + geom_text(aes(x = Form, y = cum.perc, ymax = cum.perc, label = Percentage, hjust = 0.5), size=2.7) p <- p + facet_grid(Sample_name ~ Sample_type, scales="free", space="free") p <- p + theme(plot.title = element_text("Input_profile"), axis.text.x = element_text(angle = 90, hjust = 1, size = 8, colour = "grey50"), plot.title = element_text(face="bold", size=11), axis.title.x = element_text(face="bold", size=9), axis.title.y = element_text(face="bold", size=9, angle=90), panel.grid.major = element_blank(), panel.grid.minor = element_blank()) p <- p + scale_fill_hue(c=45, l=80) p 

This gives:

ggplot2_facet_text_final

+9
source share

Here's a solution using barchart from a grid.

enter image description here

 library(latticeExtra) barchart(Percentage~Form|Sample_type*Sample_name,data=dat, groups =Position,stack=T, panel=function(...){ panel.barchart(...) ll <- list(...) keep <- !is.na(ll$groups[ll$subscripts]) x <- as.numeric(ll$x[keep]) y <- as.numeric(ll$y[keep]) groups <- as.numeric(factor(ll$groups)[ll$subscripts[keep]]) for (i in unique(x)) { ok <- x == i ord <- sort.list(groups[ok]) pos <- y[ok][ord] > 0 nok <- sum(pos, na.rm = TRUE) h <- y[ok][ord][pos] panel.text(x = rep(i, nok),y = cumsum(h)-0.5*h, label = h,cex=1.5) } }, auto.key = list(columns = 5), par.settings = ggplot2like(n = 5), lattice.options = ggplot2like.opts()) 
+5
source share

All Articles