title: Adjust geom position along discrete scale
body: <p>I'm trying to position text annotations on a plot that has both facets and a discrete axis. I can tie the position of the annotations to the points using <code>aes()</code>, but I'd like to budge them a little to keep the points readable. This is fine if the nudge is on a numeric scale: </p>
  
  <pre><code>data &lt;- data.frame(
      category = c("blue", "yellow", "red", "green"),
      rating = 1:4)
  
  gp &lt;- ggplot(data) + geom_point(aes(x = category, y = rating)) +
      geom_text(aes(label = "I have a label!", x = category, y = rating + 0.5))
  </code></pre>
  
  <p>But if I try to do it on a non-numeric scale (in this case, character) it fails:</p>
  
  <pre><code>gp &lt;- ggplot(data) + geom_point(aes(x = category, y = rating)) +
      geom_text(aes(label = "I have a label!", x = category + 0.5, y = rating))
  gp
  
  Error in unit(x, default.units) : 'x' and 'units' must have length &gt; 0
  In addition: Warning messages:
  1: In Ops.factor(category, 0.5) : + not meaningful for factors
  2: Removed 4 rows containing missing values (geom_text).
  </code></pre>
  
  <p>I could use <code>hjust</code> and <code>vjust</code> to move them a little, but since these are designed to align text rather than position it, they don't really move the annotations far enough away even at their greatest extent. Is there a way to determine the numeric scale maps the discrete variable to, or another way to manually adjust the <code>geom_text</code>'s position?</p>