That looks like what happens if the bottom of the errorbar is negative.
What do you get if you do this:
h = errorbar(hp_v3,hp_D0,hp_D0_,'ok');
h.YData - h.LData
Are the resulting values negative?
If so, what's happening is that the log transform of the negative value results in a complex value which it can't transform to a point on the screen.
Here's an attempt to recreate your data:
rng default
hp_v3 = 986:1002
hp_D0 = 1e-4*rand(1,17);
hp_D0_ = 1e-4*randn(1,17);
h = errorbar(hp_v3,hp_D0,hp_D0_,'ok')
set(gca,'YScale','log');
We can tweak the LData to stay positive like this:
ylim manual
h.LData = h.YData - max(eps,h.YData-h.LData);