r functions: ggplot barplot with errorbars

Summary

The best way to create a barplot with errorbars using ggplot in R is not obvious. I'll show a super simple solution.

example R plot made using the below function and built-in data.frame

The best way to create a barplot with errorbars using ggplot in R is not obvious. Below is a super simple solution. As it is self-explanatory, this will be my shortest entry ever. cheers!

update 2013.12.10: the code was modified slightly by adding position_dodge() to make the error lines be smaller than the bars and the theme has been cleaned up to remove the default gray background.

update 2013.12.28: wrapped the script into a function (to generalize it)—pass data as a data.frame and x/y/fill as column name strings.

download ggplot_barplot.R

R / S+
  1. ggplotErrorBarplot <-function(data,x,y,fill,...){
  2.         # makes a barplot with errorbars using ggplot, variable inputs are strings
  3.         # biafra ahanonu, updated: 2013.12.28
  4.  
  5.         # load ggplot
  6.         require(ggplot2)
  7.  
  8.         # create functions to get the lower and upper bounds of the error bars
  9.         stderr <- function(x){sqrt(var(x,na.rm=TRUE)/length(na.omit(x)))}
  10.         lowsd <- function(x){return(mean(x)-stderr(x))}
  11.         highsd <- function(x){return(mean(x)+stderr(x))}
  12.  
  13.         # create a ggplot
  14.         ggplot(data,aes_string(x=x,y=y,fill=fill))+
  15.         # first layer is barplot with means
  16.         stat_summary(fun.y=mean, geom="bar", position=position_dodge(), colour='white')+
  17.         # second layer overlays the error bars using the functions defined above
  18.         stat_summary(fun.y=mean, fun.ymin=lowsd, fun.ymax=highsd, geom="errorbar", position=position_dodge(.9),color = 'black', size=.5, width=0.2)+
  19.         theme(line = element_blank(),panel.background = element_rect(fill = "white", colour = NA))
  20. }
  21.  

-biafra
bahanonu [at] alum.mit.edu

other entires to explore:

sublime text
16 august 2012 | programming

When coding, writing up blog post, or doing any other task, I generally have used Notepad++. It is a great program that au[...]tomatically detects, based on the extension, the type of code you are writing and parses the file accordingly. It is light and gets the job done, but it always felt like it could be taken to the next level. Enter Sublime Text 2, a program that seems to have everything I am looking for in a text editor and then some.

state of sbsa: a review of 2017 and thoughts on future directions
04 june 2017 | sbsa

I spent the past year leading the Stanford Biosciences Student Association (SBSA) as President. This post consist of the letter to the comm[...]unity I sent out at the end of my term giving some highlights of the past year, those who have helped out, and thoughts on future directions.

Tsai Lab
26 December 2011 | designs

Implemented the mock-up during a wait at Logan airport. It is world's better than the current site, both navigationally and on the eyes.[...]>

quantized art
28 may 2012 | essay

Quantized art. The idea came about while reading how the music industry assembles top-liners, producers, artists, performers, etc. to [...]create top 40 hits. For example, there has been a recent trend in pop music to use 'drops', when the song builds to a crescendo and then a crazy, catchy bass line is released that causes everyone to dance. This has been perfected to the point where even an okay song can become popular because the producers know when to build, at what moment to intersperse catchy, meaningless lyrics and how to end the song on a high. I like the idea that art (as in paintings, drawings, etc.) can be dissected and quantified.

My first pass at developing an algorithm to break art down to its details and then use this knowledge to generate art that people would consider 'great'. We'll see how this evolves.

©2006-2025 | Site created & coded by Biafra Ahanonu | Updated 21 October 2024
biafra ahanonu