R Grouped Barplot Error Bars
Contents |
here for a quick overview of the site Help Center Detailed answers to any questions you barplot with error bars ggplot2 might have Meta Discuss the workings and policies of this site
Adding Standard Error Bars In R
About Us Learn more about Stack Overflow the company Business Learn more about hiring developers or
Error.bar R
posting ads with us Stack Overflow Questions Jobs Documentation Tags Users Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of
Error.bar Function R
6.2 million programmers, just like you, helping each other. Join them; it only takes a minute: Sign up Grouped barplot in R with error bars up vote 4 down vote favorite 1 Dear Stackoverflow users, I would like to draw a grouped barplot with error bars. Here is the kind of figure I have barplot with error bars matlab been able to get up to now, and this is ok for what I need: And here is my script: #create dataframe Gene<-c("Gene1","Gene2","Gene1","Gene2") count1<-c(12,14,16,34) count2<-c(4,7,9,23) count3<-c(36,22,54,12) count4<-c(12,24,35,23) Species<-c("A","A","B","B") df<-data.frame(Gene,count1,count2,count3,count4,Species) df mean1<-mean(as.numeric(df[1,][c(2,3,4,5)])) mean2<-mean(as.numeric(df[2,][c(2,3,4,5)])) mean3<-mean(as.numeric(df[3,][c(2,3,4,5)])) mean4<-mean(as.numeric(df[4,][c(2,3,4,5)])) Gene1SpeciesA.stdev<-sd(as.numeric(df[1,][c(2,3,4,5)])) Gene2SpeciesA.stdev<-sd(as.numeric(df[2,][c(2,3,4,5)])) Gene1SpeciesB.stdev<-sd(as.numeric(df[3,][c(2,3,4,5)])) Gene2SpeciesB.stdev<-sd(as.numeric(df[4,][c(2,3,4,5)])) ToPlot<-c(mean1,mean2,mean3,mean4) #plot barplot plot<-matrix(ToPlot,2,2,byrow=TRUE) #with 2 being replaced by the number of genes! tplot<-t(plot) BarPlot <- barplot(tplot, beside=TRUE,ylab="count", names.arg=c("Gene1","Gene2"),col=c("blue","red")) #add legend legend("topright", legend = c("SpeciesA","SpeciesB"), fill = c("blue","red")) #add error bars ee<-matrix(c(Gene1SpeciesA.stdev,Gene2SpeciesA.stdev,Gene1SpeciesB.stdev,Gene2SpeciesB.stdev),2,2,byrow=TRUE)*1.96/sqrt(4) tee<-t(ee) error.bar(BarPlot,tplot,tee) The problem is that I need to do this for 50 genes, and 4 species, so my script is gonna get super super long and I guess this is not optimized... I tried to find help here but I can't figure out a better way to do what I'd like. If I did not need error bars I could adapt this script but the tricky part is to mix ggplot beautiful barplots and error bars! ;) If you have any idea to optimize my script, I would really
Diet & Nutrition (28) Education (1) Evolution (35) Human Ecology (75) Infectious Disease (66) LaTeX (5) Primates (9) R (12) science (17) Social Network Analysis (17) Statistics (16) Teaching (10) Uncategorized (28) Meta Log in Entries RSS Comments RSS errbar r WordPress.org ← Latest Swine Flu Epidemic Curve for the United States Stanford Workshop in summaryse r Biodemography → Plotting Error Bars in R August 24th, 2009 · 52 Comments · R One common frustration that I have heard scatter plot with error bars in r expressed about R is that there is no automatic way to plot error bars (whiskers really) on bar plots. I just encountered this issue revising a paper for submission and figured I'd share my code. http://stackoverflow.com/questions/29768219/grouped-barplot-in-r-with-error-bars The following simple function will plot reasonable error bars on a bar plot. PLAIN TEXT R: error.bar <- function(x, y, upper, lower=upper, length=0.1,...){ if(length(x) != length(y) | length(y) !=length(lower) | length(lower) != length(upper)) stop("vectors must be same length") arrows(x,y+upper, x, y-lower, angle=90, code=3, length=length, ...) } Now let's use it. First, I'll create 5 means drawn from a Gaussian random variable with unit mean and variance. I want to point http://monkeysuncle.stanford.edu/?p=485 out another mild annoyance with the way that R handles bar plots, and how to fix it. By default, barplot() suppresses the X-axis. Not sure why. If you want the axis to show up with the same line style as the Y-axis, include the argument axis.lty=1, as below. By creating an object to hold your bar plot, you capture the midpoints of the bars along the abscissa that can later be used to plot the error bars. PLAIN TEXT R: y <- rnorm(500, mean=1) y <- matrix(y,100,5) y.means <- apply(y,2,mean) y.sd <- apply(y,2,sd) barx <- barplot(y.means, names.arg=1:5,ylim=c(0,1.5), col="blue", axis.lty=1, xlab="Replicates", ylab="Value (arbitrary units)") error.bar(barx,y.means, 1.96*y.sd/10) Now let's say we want to create the very common plot in reporting the results of scientific experiments: adjacent bars representing the treatment and the control with 95% confidence intervals on the estimates of the means. The trick here is to create a 2 x n matrix of your bar values, where each row holds the values to be compared (e.g., treatment vs. control, male vs. female, etc.). Let's look at our same Gaussian means but now compare them to a Gaussian r.v. with mean 1.1 and unit variance. PLAIN TEXT R: y1 <- rnorm(500, mean=1.1) y1 <- matrix(y1,100,5) y1.means <- apply(y1,2,mean) y1.sd <- ap
error bars Two within-subjects variables Note about normed means Helper functions Problem You want http://cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/ to plot means and error bars for a dataset. Solution To make graphs with ggplot2, the data must be in a data frame, and http://blog.revolutionanalytics.com/2009/09/making-barplots-with-error-bars-in-r.html in “long” (as opposed to wide) format. If your data needs to be restructured, see this page for more information. Sample data The error bars examples below will the ToothGrowth dataset. Note that dose is a numeric column here; in some situations it may be useful to convert it to a factor. tg <- ToothGrowth head(tg) #> len supp dose #> with error bars 1 4.2 VC 0.5 #> 2 11.5 VC 0.5 #> 3 7.3 VC 0.5 #> 4 5.8 VC 0.5 #> 5 6.4 VC 0.5 #> 6 10.0 VC 0.5 library(ggplot2) First, it is necessary to summarize the data. This can be done in a number of ways, as described on this page. In this case, we’ll use the summarySE() function defined on that page, and also at the bottom of this page. (The code for the summarySE function must be entered before it is called here). # summarySE provides the standard deviation, standard error of the mean, and a (default 95%) confidence interval tgc <- summarySE(tg, measurevar="len", groupvars=c("supp","dose")) 11, 2009 Making barplots with error bars in R When presenting summarized data -- the data in the cells of a two-way ANOVA, for example -- it's always a good idea to visualize the uncertainty in the summaries. The natural way for statisticians is to use a boxplot, and ggplot2 makes that easy: qplot(class, hwy, fill=factor(year), data=mpg, geom="boxplot", position="dodge")+theme_bw() But Jarrett Byrnes, a marine community biologist, wanted to use a barplot, instead. (A boxplot shows more details of the distribution, but more people know how to read a barplot.) As he shows, it is possible, with a little extra work, add error bars to a barplot with ggplot2: See the link below for the code: a great demonstration of the customization capabilities of ggplot2. i’m a chordata! urochordata!: Let’s All Go Down to the Barplot! (Update Jan 2 2013: link to http://www.imachordata.com/?p=199 removed -- site compromised) Posted by David Smith at 07:11 in graphics, R | Permalink Comments You can follow this conversation by subscribing to the comment feed for this post. The comments to this entry are closed. Information About this blog Comments Policy About Categories About the Authors Local R User Group Directory Tips on Starting an R User Group Search Revolutions Blog Got comments or suggestions for the blog editor? Email David Smith. Follow David on Twitter: @revodavid +David Smith Get this blog via email with Categories academia advanced tips announcements applications beginner tips big data courses current events data science developer tips events finance government graphics high-performance computing life sciences Microsoft open source other industry packages popularity predictive analytics profiles python R R is Hot random reviews Revolution Rmedia roundups sports statistics user groups