I have two options that you can see.
First set the location and size of the axis as such:
# your imports and data above fig = plt.figure() ax0a = fig.add_axes([0.1, 0.1, 0.8, 0.25]) ax0b = fig.add_axes([0.1, 0.39, 0.8, 0.25], sharex=ax0a) ax0c = fig.add_axes([0.1, 0.68, 0.8, 0.25], sharex=ax0a) ax0a.set_xticklabels([]) ax0b.set_xticklabels([]) ax0a.plot(x,y) nbins = len(ax0a.get_xticklabels()) ax0a.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper')) ax0b.plot(x,y) ax0b.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper')) ax0c.plot(x,y) ax0c.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper')) plt.show()

The second option is to manually adjust the location and possibly the font size of the offset text:
# your original code minus data and imports fig = plt.figure() gs1 = gridspec.GridSpec(3, 3) gs1.update(left=0.1, right=0.9, bottom=0.5, hspace=0.0) ax0a = plt.subplot(gs1[0, :]) ax0b = plt.subplot(gs1[1, :]) ax0c = plt.subplot(gs1[2, :]) ax0a.set_xticklabels([]) ax0b.set_xticklabels([]) ax0a.plot(x,y) nbins = len(ax0a.get_xticklabels()) ax0a.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper')) ax0b.plot(x,y) ax0b.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper')) ax0c.plot(x,y) ax0c.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper'))

source share