title: Annotation auto-placement (matploylib.pyplot) -or list annotations
body: <p>I have code that handles coloring and plotting multiple plots automatically easily (for me). I want to make annotation easier:</p>
  
  <p><strong>goal:</strong> If an annotation xy conflicts with a previous one, shift - say up - until there is no conflict with no other annotation.</p>
  
  <ol>
  <li><p>If there is a function already capable of this that would be a dream, I couldn't find one.</p></li>
  <li><p>Otherwise - what's the best way to list annotations and get their bounding box in the coordinate system?</p></li>
  </ol>
  
  <p>I have a code for auto coloring that looks like this:</p>
  
  <pre><code>if chain:
      children = []
      for child in Iplot.axes.get_children():
          if (type(child) is not matplotlib.collections.PathCollection and
              type(child) is not matplotlib.lines.Line2D):
              continue
          children.append(child)
      col_step = 1.0/(len(children)+len(args))
      for child in children:
          child.set_color([Iplot.col,0,1-Iplot.col])
          Iplot.col += col_step
  </code></pre>
  
  <p>I could do something similar for annotations (change if statement and body of second loop), but 1) I don't like this piece of code 2) I'm hoping something more elegant exists.</p>
  
  <p>Thanks</p>