繁体   English   中英

matplotlib中具有相等纵横比的不一致的图形坐标

[英]Inconsistent figure coordinates in matplotlib with equal aspect ratio

我正准备一个带有子图和箭头的图形从这里到另一个,这里解决了: 在Matplotlib中两个图之间绘制线条

在我的图中,子图都具有相等的宽高比,这似乎搞乱了从数据坐标到图形坐标的转换,因此我创建的Line2D对象不会到达我想要的位置。

这是一个简单的示例(从上面的链接修改),它演示了问题,甚至不需要子图:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(6,4))
ax = fig.add_subplot(111)
ax.set_aspect('equal')

x = [0.2, 0.9]
y = [0.3, 0.7]

ax.plot(x,y,'k--', lw=4)

transFigure = fig.transFigure.inverted()

coord1 = transFigure.transform(ax.transData.transform([x[0],y[0]]))
coord2 = transFigure.transform(ax.transData.transform([x[1],y[1]]))

line = matplotlib.lines.Line2D((coord1[0],coord2[0]),(coord1[1],coord2[1]),
                           transform=fig.transFigure)

fig.lines.append(line)

plt.show()

通过改变图形的尺寸,很容易看出Line2D对象改变斜率,而轴上的图形保持其斜率(根据需要获得相同的纵横比)。

有没有一种直接的方法来获得这些图形坐标(或使用不同的变换),使得Line2D对象与绘制的线保持一致?

问题在于,当将方面设置为等于轴的尺寸和位置时,只有在绘制到画布上的某些内容时才能通过matplotlib确定。 在绘制数据之前,它无法知道轴在最终图中的位置。 使用更多极端点,如x = [0.2, 0.9]; y = [0.55, 0.6] x = [0.2, 0.9]; y = [0.55, 0.6]使得更清楚。

在此输入图像描述

最简单的解决方案是打电话

fig.canvas.draw()

plot命令之后,但在进行任何转换工作之前。 通过这种方式,图形被绘制到画布上,应用相同的方面; 从这一点开始,可以进行正确的转换。

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM