title: Dodging points and error bars with ggplot
body: <p>Consider this data (note that <code>foo</code> is actually a factor.):</p>
  
  <pre><code>foo bar outcome ci
  1   a   0.683333333 0.247447165
  2   b   0.941666667 0.180356565
  3   c   0.783333333 0.335337789
  1   d   0.866666667 0.204453706
  2   e   0.45    0.303059647
  3   f   0.325   0.340780173
  </code></pre>
  
  <p>I want to plot multiple <code>bar</code>s per <code>foo</code> value, with their <code>outcome</code> and error bars with CI. Here's what I do:</p>
  
  <pre><code>ggplot(ex, aes(foo, outcome, label = bar)) + 
    geom_point(position = position_dodge(.1)) + 
    geom_errorbar(aes(ymin = outcome - ci, ymax = outcome + ci), position = position_dodge(.1)) + 
    geom_text(hjust = 2)
  </code></pre>
  
  <p>I get:</p>
  
  <p><img src="https://i.stack.imgur.com/3frIo.png" alt=""></p>
  
  <p>But I wanted it to dodge the error bars and points so I can see the overlap. <a href="https://stackoverflow.com/questions/17281027/dodge-not-working-when-using-ggplot2">Using <code>position_jitter</code> did that</a>, but it was totally random (or <a href="https://stackoverflow.com/questions/16874376/position-dodge-with-error-bars-in-ggplot2">"clunky"</a>) — I don't want that.</p>
  
  <p>How can I offset the individual observations?</p>
  
  <p>Or is this a bug with ggplot? The <a href="http://docs.ggplot2.org/0.9.3/position_dodge.html" rel="nofollow noreferrer">example here</a> also <a href="http://docs.ggplot2.org/0.9.3/position_dodge-15.png" rel="nofollow noreferrer">shows this error</a>.</p>