在尝试在子图之间绘制一条线时,我遇到matplotlib(版本1.4.3
)/ pyplot中的一个错误:在设置set_aspect("equal")
之后,它出现了相关的坐标转换函数({ {1}})不要更新。执行下面的代码并取消注释transData
以查看差异。
ax.set_aspect("equal")
答案 0 :(得分:1)
您遇到的问题是在绘制操作之后才会应用set_aspect
。因此,当您制作线时,限制没有改变。请注意第二张图像中的不同x限制,而线条位于同一位置:绘制线条就好像x限制没有改变一样,因为它们尚未更改,并且在{}之前不会更改{1}}。解决此问题的方法是在执行plt.show()
后添加plt.draw()
,但在开始处理转换之前。以下代码执行此操作,使用print语句可以在不同时间清除限制和转换的问题:
set_aspect
这一点应该真正添加到set_aspect的docstring中,我会看看能不能这样做。这不是一个错误:直到情节准备好后才能确定方面。
答案 1 :(得分:0)
cge对为什么的评估是正确的,但对我来说,他的代码产生了:
x限制越来越混乱,因为它们应该匹配y限制和相等。
要解决此问题,您可以使用figsize
关键字参数将图形大小调整为更合适的子图。在下面的代码中,我选择了10in x 5in。
import matplotlib.pyplot as plt
import matplotlib as mpl
f, (ax1, ax2) = plt.subplots(1, 2, sharey='all', sharex='all', figsize=(10,5))
for ax in (ax1, ax2):
ax.set_aspect("equal")
ax.set_ylim([-.2, 1.2])
ax.set_xlim([-.2, 1.2])
plt.draw()
# From http://stackoverflow.com/questions/17543359/drawing-lines-between-two-plots-in-matplotlib
transFigure = f.transFigure.inverted()
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()
这会产生: