I had a similar problem; I noticed that when calling ax.get_xticks the ticks are just 0.5, 1.5, 2.5 etc. Calling ax.get_xticklabels gives the corresponding dates so one could then map between these. Using the x coords from the ticks places the vlines in the right location but you may need to play with the zorder to get the desired look.