<p dir="auto">Any draggable annotation is displayed in the wrong position after dragging (i.e. nowhere near the mouse cursor) if either of the initial XY coordinates is negative. Minimal example:<br>
<a target="_blank" rel="noopener noreferrer nofollow" href="https://cloud.githubusercontent.com/assets/4472522/6884211/09f0fa00-d59a-11e4-9b2e-fa54be93ebb6.gif"><img src="https://cloud.githubusercontent.com/assets/4472522/6884211/09f0fa00-d59a-11e4-9b2e-fa54be93ebb6.gif" alt="drag" data-animated-image="" style="max-width: 100%;"></a></p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcdefaults()
mpl.rcParams['toolbar'] = 'none'

plt.figure(figsize=(5, 2))
plt.plot(range(-10, 10))
an1 = plt.annotate(s='good', xy=(15, 5), bbox={'alpha': 0.5})
an1.draggable()
an2 = plt.annotate(s='bad', xy=(5, -5), bbox={'alpha': 0.5})
an2.draggable()
plt.show()"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-s1">matplotlib</span>.<span class="pl-s1">pyplot</span> <span class="pl-k">as</span> <span class="pl-s1">plt</span>
<span class="pl-k">import</span> <span class="pl-s1">matplotlib</span> <span class="pl-k">as</span> <span class="pl-s1">mpl</span>
<span class="pl-s1">mpl</span>.<span class="pl-en">rcdefaults</span>()
<span class="pl-s1">mpl</span>.<span class="pl-s1">rcParams</span>[<span class="pl-s">'toolbar'</span>] <span class="pl-c1">=</span> <span class="pl-s">'none'</span>

<span class="pl-s1">plt</span>.<span class="pl-en">figure</span>(<span class="pl-s1">figsize</span><span class="pl-c1">=</span>(<span class="pl-c1">5</span>, <span class="pl-c1">2</span>))
<span class="pl-s1">plt</span>.<span class="pl-en">plot</span>(<span class="pl-en">range</span>(<span class="pl-c1">-</span><span class="pl-c1">10</span>, <span class="pl-c1">10</span>))
<span class="pl-s1">an1</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">annotate</span>(<span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-s">'good'</span>, <span class="pl-s1">xy</span><span class="pl-c1">=</span>(<span class="pl-c1">15</span>, <span class="pl-c1">5</span>), <span class="pl-s1">bbox</span><span class="pl-c1">=</span>{<span class="pl-s">'alpha'</span>: <span class="pl-c1">0.5</span>})
<span class="pl-s1">an1</span>.<span class="pl-en">draggable</span>()
<span class="pl-s1">an2</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">annotate</span>(<span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-s">'bad'</span>, <span class="pl-s1">xy</span><span class="pl-c1">=</span>(<span class="pl-c1">5</span>, <span class="pl-c1">-</span><span class="pl-c1">5</span>), <span class="pl-s1">bbox</span><span class="pl-c1">=</span>{<span class="pl-s">'alpha'</span>: <span class="pl-c1">0.5</span>})
<span class="pl-s1">an2</span>.<span class="pl-en">draggable</span>()
<span class="pl-s1">plt</span>.<span class="pl-en">show</span>()</pre></div>
<p dir="auto">It is caused by the reference coordinates being set apparently incorrectly here: <a href="https://github.com/matplotlib/matplotlib/blob/8a270fcc64197ee00c818ec8f9ccc9f0e884828a/lib/matplotlib/text.py#L1597-1605">https://github.com/matplotlib/matplotlib/blob/8a270fcc64197ee00c818ec8f9ccc9f0e884828a/lib/matplotlib/text.py#L1597-1605</a></p>
<p dir="auto">Using matplotlib 1.4.3 with various OSes/backends.</p>
<p dir="auto">I am finding that annotations placed outside of axes get placed incorrectly in v1.4.3.  Here is an example:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="import matplotlib.pyplot as plt
import matplotlib as mpl

fig, ax = plt.subplots()

ax.annotate('+ pts', 
    xytext = [40, 20], textcoords = 'axes points', \
    xy = [40, 20], xycoords = 'axes points', fontsize = 32)
ax.annotate('- pts', 
    xytext = [40, -20], textcoords = 'axes points', \
    xy = [40, -20], xycoords = 'axes points', fontsize = 32)
ax.annotate('+ frac', 
    xytext = [0.5, 0.1], textcoords = 'axes fraction', \
    xy = [0.5, 0.1], xycoords = 'axes fraction', fontsize = 32)
ax.annotate('- frac', 
    xytext = [0.5, -0.1], textcoords = 'axes fraction', \
    xy = [0.5, -0.1], xycoords = 'axes fraction', fontsize = 32)
plt.savefig('test' + mpl.__version__ + '.png')"><pre class="notranslate"><code class="notranslate">import matplotlib.pyplot as plt
import matplotlib as mpl

fig, ax = plt.subplots()

ax.annotate('+ pts', 
    xytext = [40, 20], textcoords = 'axes points', \
    xy = [40, 20], xycoords = 'axes points', fontsize = 32)
ax.annotate('- pts', 
    xytext = [40, -20], textcoords = 'axes points', \
    xy = [40, -20], xycoords = 'axes points', fontsize = 32)
ax.annotate('+ frac', 
    xytext = [0.5, 0.1], textcoords = 'axes fraction', \
    xy = [0.5, 0.1], xycoords = 'axes fraction', fontsize = 32)
ax.annotate('- frac', 
    xytext = [0.5, -0.1], textcoords = 'axes fraction', \
    xy = [0.5, -0.1], xycoords = 'axes fraction', fontsize = 32)
plt.savefig('test' + mpl.__version__ + '.png')
</code></pre></div>
<p dir="auto">In matplotlib v1.4.2 the plot looks like this:<br>
<a target="_blank" rel="noopener noreferrer nofollow" href="https://cloud.githubusercontent.com/assets/4099759/6883289/4627552e-d56c-11e4-8518-543d4dee233e.png"><img src="https://cloud.githubusercontent.com/assets/4099759/6883289/4627552e-d56c-11e4-8518-543d4dee233e.png" alt="test1 4 2" style="max-width: 100%;"></a></p>
<p dir="auto">In matplotlib v1.4.3 the plot looks like this:<br>
<a target="_blank" rel="noopener noreferrer nofollow" href="https://cloud.githubusercontent.com/assets/4099759/6883290/4d13ae3c-d56c-11e4-85f1-dd4b195dc9d6.png"><img src="https://cloud.githubusercontent.com/assets/4099759/6883290/4d13ae3c-d56c-11e4-85f1-dd4b195dc9d6.png" alt="test1 4 3" style="max-width: 100%;"></a></p>
<p dir="auto">Apparently v1.4.3 takes a negative axes fraction (or points) and wraps it around to the top of the axes.</p>