<p>在花了太多的时间在这上面之后,我提出了以下令人满意的解决方案(肯定有帮助的<a href="http://matplotlib.org/users/transforms_tutorial.html" rel="noreferrer">Transformations Tutorial</a>):</p>
<pre><code>bapad = plt.rcParams['legend.borderaxespad']
fontsize = plt.rcParams['font.size']
axline = plt.rcParams['axes.linewidth'] #need this, otherwise the result will be off by a few pixels
pad_points = bapad*fontsize + axline #padding is defined in relative to font size
pad_inches = pad_points/72.0 #convert from points to inches
pad_pixels = pad_inches*fig.dpi #convert from inches to pixels using the figure's dpi
</code></pre>
<p>然后,我发现以下两项都起作用,并为填充提供相同的值:</p>
<pre><code># Define inverse transform, transforms display coordinates (pixels) to axes coordinates
inv = ax[1].transAxes.inverted()
# Inverse transform two points on the display and find the relative distance
pad_axes = inv.transform((pad_pixels, 0)) - inv.transform((0,0))
pad_xaxis = pad_axes[0]
</code></pre>
<p>或者</p>
<pre><code># Find how may pixels there are on the x-axis
x_pixels = ax[1].transAxes.transform((1,0)) - ax[1].transAxes.transform((0,0))
# Compute the ratio between the pixel offset and the total amount of pixels
pad_xaxis = pad_pixels/x_pixels[0]
</code></pre>
<p>然后将图例设置为:</p>
<pre><code>ax[1].legend(loc=(pad_xaxis,0.6))
</code></pre>
<p>绘图:</p>
<p><img src="https://i.imgur.com/UyqP3FS.png" alt=""/></p>