<p>您遇到的问题是<code>set_aspect</code>直到一个draw操作之后才被应用。因此,当你做这条线的时候,限制并没有改变。请注意第二张图片中的不同x限制,而这条线在同一个位置:绘制这条线时就好像x限制没有更改一样,因为它们还没有更改,而且直到<code>plt.show()</code>才会更改。解决方法是在您执行<code>set_aspect</code>之后,但在开始处理转换之前,添加一个<code>plt.draw()</code>。下面的代码使用print语句来实现这一点,这些语句清楚地说明了不同时间的限制和转换问题:</p>
<pre><code>import matplotlib.pyplot as plt
import matplotlib as mpl
f, (ax1, ax2) = plt.subplots(1, 2, sharey='all', sharex='all')
for ax in (ax1, ax2):
ax.set_ylim([-.2, 1.2])
ax.set_xlim([-0.2, 1.2])
transFigure = f.transFigure.inverted()
print ax1.get_xlim(), ax1.transData.transform([0,0])
for ax in (ax1, ax2):
ax.set_aspect('equal')
print ax1.get_xlim(), ax1.transData.transform([0,0])
plt.draw()
print ax1.get_xlim(), ax1.transData.transform([0,0])
coord1 = transFigure.transform(ax1.transData.transform([0,0]))
coord2 = transFigure.transform(ax2.transData.transform([1,0]))
line = mpl.lines.Line2D((coord1[0],coord2[0]),(coord1[1],coord2[1]),
transform=f.transFigure)
f.lines.append(line)
plt.show()
</code></pre>
<p>这一点真的应该添加到set_方面的docstring中,我看看我是否可以做到。这不是一个bug:只有在绘图准备就绪之后,才能真正确定方面。在</p>