Offsetting tick labels

I am trying to get alternating tick labels to move completely above and completely below the x axis. If I call:

set_ha('top')

… then the number appears fully below the x axis. However, when I call:

set_ha('bottom')

… then the number appears roughly vertically centered on the axis.

I am aware that vertical alignment only matches text to its bounding box. Is there a way to move this bounding box? I have tried calling set_position on the text but this seems to have no effect. I would be grateful for any suggestions as to how I can move the tick labels appropriately.