R Error Bar Plot
Contents |
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies
Error.bar Function R
of this site About Us Learn more about Stack Overflow the company Business error bar plot matlab Learn more about hiring developers or posting ads with us Stack Overflow Questions Jobs Documentation Tags Users Badges
Scatter Plot With Error Bars In R
Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 6.2 million programmers, just like you, helping each other. Join them; it only takes a minute: error bars in r barplot Sign up Scatter plot with error bars up vote 21 down vote favorite 11 How can I generate the following plot in R? Points, shown in the plot are the averages, and their ranges correspond to minimal and maximal values. I have data in two files (below is an example). x y 1 0.8773 1 0.8722 1 0.8816 1 0.8834 1 0.8759 1 errbar r 0.8890 1 0.8727 2 0.9047 2 0.9062 2 0.8998 2 0.9044 2 0.8960 .. ... r plot share|improve this question edited Oct 23 '12 at 15:10 Roland 74.2k463103 asked Oct 23 '12 at 14:29 sherlock85 1521313 Since you clearly don't want a boxplot, I changed the title of your question in order to reflect what you really want. –Roland Oct 23 '12 at 15:11 1 also plotrix::plotCI, gplots::plotCI, library("sos"); findFn("{error bar}") –Ben Bolker Oct 23 '12 at 17:29 add a comment| 5 Answers 5 active oldest votes up vote 52 down vote accepted First of all: it is very unfortunate and surprising that R cannot draw error bars "out of the box". Here is my favourite workaround, the advantage is that you do not need any extra packages. The trick is to draw arrows (!) but with little horizontal bars instead of arrowheads (!!!). This not-so-straightforward idea comes from the R Wiki Tips and is reproduced here as a worked-out example. Let's assume you have a vector of "average values" avg and another vector of "standard deviations" sdev, they are of the
|| is.character(x)) "" else as.character(substitute(y)), add=FALSE, lty=1, type='p', ylim=NULL, lwd=1, pch=16, Type=rep(1, length(y)), ...) Arguments x vector of numeric x-axis values (for vertical error bars) or a
Ggplot2 Error Bars
factor or character variable (for horizontal error bars, x representing the group summaryse r labels) y vector of y-axis values. yplus vector of y-axis values: the tops of the error bars. yminus vector
R Calculate Standard Error
of y-axis values: the bottoms of the error bars. cap the width of the little lines at the tops and bottoms of the error bars in units of the width http://stackoverflow.com/questions/13032777/scatter-plot-with-error-bars of the plot. Defaults to 0.015. main a main title for the plot, see also title. sub a sub title for the plot. xlab optional x-axis labels if add=FALSE. ylab optional y-axis labels if add=FALSE. Defaults to blank for horizontal charts. add set to TRUE to add bars to an existing plot (available only for vertical error bars) lty type of http://svitsrv25.epfl.ch/R-doc/library/Hmisc/html/errbar.html line for error bars type type of point. Use type="b" to connect dots. ylim y-axis limits. Default is to use range of y, yminus, and yplus. For horizonal charts, ylim is really the x-axis range, excluding differences. lwd line width for line segments (not main line) pch character to use as the point. Type used for horizontal bars only. Is an integer vector with values 1 if corresponding values represent simple estimates, 2 if they represent differences. ... other parameters passed to all graphics functions. Details errbar adds vertical error bars to an existing plot or makes a new plot with error bars. It can also make a horizontal error bar plot that shows error bars for group differences as well as bars for groups. For the latter type of plot, the lower x-axis scale corresponds to group estimates and the upper scale corresponds to differences. The spacings of the two scales are identical but the scale for differences has its origin shifted so that zero may be included. If at least one of the confidence intervals includes zero, a vertical
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 http://monkeysuncle.stanford.edu/?p=485 RSS Comments RSS WordPress.org ← Latest Swine Flu Epidemic Curve for the United States Stanford Workshop in Biodemography → Plotting Error Bars in R August 24th, 2009 · 52 Comments · R One http://davetang.org/muse/2014/06/25/plotting-error-bars-with-r/ common frustration that I have heard 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 error bar for submission and figured I'd share my code. 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 error bar plot random variable with unit mean and variance. I want to point 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.
25, 2014 by Davo Error bars may show confidence intervals, standard errors, and standard deviations. Each feature conveys a different message and this paper on error bars in experimental biology explains it very nicely. For this post I will demonstrate how to plot error bars that show the standard error (SE) or standard error of the mean (SEM). I found two nice resources that demonstrate the plotting of error bars with R and in this post I illustrate them with simple examples. The first method is from the website of James Holland Jones, where he wrote an R function that plots arrows to a bar plot. #generate some random numbers set.seed(31) a <- runif(10, 0, 10) b <- runif(10, 0, 10) c <- runif(10, 0, 10) #store them as a data.frame df <- data.frame(a=a, b=b, c=c) #function for error bars 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, ...) } #function for standard error of the mean sem <- function(x){ sd(x)/sqrt(length(x)) } #calculate means my_mean <- apply(df, 2, mean) #calculate sem my_sem <- apply(df, 2, sem) #barplot barx <- barplot(my_mean, names.arg=names(df), ylim=c(0,ceiling(max(df))), xlab='Class', ylab='Unit of measure') error.bar(barx, my_mean, my_sem) The second resource I found on plotting error bars with R was from the Cookbook for R, which showed many examples using the R package ggplot2. Here is a simple example I adapted from their cookbook, using the same set of random numbers I generated above: #install if necessary install.packages('ggplot2') #load library library(ggplot2) set.seed(31) a <- runif(10, 0, 10) b <- runif(10, 0, 10) c <- runif(10, 0, 10) df <- data.frame(a=a, b=b, c=c) sem <- function(x){ sd(x)/sqrt(length(x)) } my_mean <- apply(df, 2, mean) my_sem <- apply(df, 2, sem) #new data frame for storing the mean and sem mean_sem <- data.frame(mean=my_mean, sem=my_sem, group=names(df)) #larger font theme_set(theme_gray(base_size = 20)) #plot using ggplot ggplot(mean_sem, aes(x=group, y=mean)) + geom_bar(stat='identity') + geom_errorbar(aes(ymin=mean-sem, ymax=mean+sem), width=.2) + xlab('Class') + ylab('Unit of measure') I had been using the first approach for plotting error bars with R but I think the ggplot2 plot looks much better (with less effort). Lastly, it has been over a month since my last post, though I have been updating old posts. I've been spending time writing my thesis and papers but