I've NEVER understood (and never will understand) the annotation implementation only in absolute units of reference relative to the figure coordinates and no option for datacentric placement relative to the axes. It's mind-bogglingly obtuse and mostly of little use as implemented. And, to compound the problem, absolutely none of the examples show how to get from one to the other to do something as simple as what you're looking for...they all have "magic numbers" buried in them that were picked to work for the sake of pretty illustrations, but no guidance on how the values were arrived at.
The problem is you've got to scale the coordinates of the axes from their data values on the axes to the corresponding position in the figure coordinates in order to be able to put the annotation where you want it in a coordinate system in which values are known...
Here's an example to get what you're looking for...it can be packaged a little more elegantly, but let's you see what's needed this way--
hAx=axes;
xlim([0 700]),ylim([-120 175])
hR=rectangle('Position',[0,0,700,60]);
pos=hAx.Position;
yAnn=interp1(ylim,[pos(2) pos(2)+pos(4)],[20]);
hA=annotation('doublearrow',[pos(1) pos(1)+pos(3)],[yAnn yAnn]);
Remember the position 4-vector is [left bottom width height] so x positions are [left left+width]
The above produces:
Again, why in the world one can't set the 'Units' property to 'data' and reference the axes for the container totally incomprehensible to me.
ADDENDUM:
To draw at a given x position other than the axes limits, you'd interpolate on the x position values just as did above for yAnn, of course. These are ideal candidates to be written as anonymous functions to generalize.
ADDENDUM SECOND:
"I've NEVER understood ... the annotation implementation only in absolute units of reference relative to the figure coordinates ..."
Well, the above is not quite true, I understand the "why" -- because the annotation object is a child of the figure and cannot be a child of an axes. Hence, the units are those of the parent.
More accurately, what I do not understand is if there is some reason why TMW cannot also make provisions to have the axes accept an annotation as a child, why on earth they didn't provide the high-level pieces needed to be able to use what they did provide in a user-friendly manner.
Sure, it's doable, but why should the user have to do it -- MATLAB should live up to the rapid-development environment that handles stuff like this you for you so you don't have to.
ADDENDUM THIRD:
And, it's clear I'm not alone...some 15 others had already viewed the Q? with not even a comment before I came along.