Thank you for a copy-paste-runable example, it made it super easy to help you :)
The units that the positions are in is "axes fraction" which is the coordinate system on the Axes object where (0,0) is the lower left and (1, 1) is the upper right. In this coordinate system 1.35 is a 0.35 * (axes width) to the right of the right edge of the Axes which happens to be out of the Figure.
it will shrink the Axes enough that it will all fit.
If you have a mpl >=3.1 then you can do
fig, host = plt.subplots(constrained_layout=True)
# fig.subplots_adjust(right=0.5) # remove the call to subplots_adjust
It will automatically resize everything to fit and completely fill the available space!
import matplotlib.pyplot as plt
def make_patch_spines_invisible(ax): ax.set_frame_on(True) ax.patch.set_visible(False) for sp in ax.spines.values(): sp.set_visible(False)
# Offset the right spine of par2. The ticks and label have already been # placed on the right by twinx above. par2.spines["right"].set_position(("axes", 1.2)) par3.spines["right"].set_position(("axes", 1.35)) # Having been created by twinx, par2 has its frame off, so the line of its # detached spine is invisible. First, activate the frame but make the patch # and spines invisible. #make_patch_spines_invisible(par2) make_patch_spines_invisible(par3) # Second, show the right spine. par2.spines["right"].set_visible(True) par3.spines["right"].set_visible(True)