matplotlib.pyplot,保留图的纵横比

Hea*_*rab 43 python matplotlib

假设我们有一个多边形坐标为polygon = [(x1,y1),(x2,y2),...],下面的代码显示了多边形:

import matplotlib.pyplot as plt
plt.fill(*zip(*polygon))
plt.show()
Run Code Online (Sandbox Code Playgroud)

默认情况下,它会尝试调整宽高比,以便多边形(或任何其他图表)适合窗口内部,并自动更改它,以便即使在调整大小后也适合.在许多情况下这是很好的,除非你试图在视觉上估计图像是否扭曲.如何将纵横比严格控制为1:1?

(不确定"宽高比"在这里是否是正确的术语,所以如果不是 - 我需要X和Y轴都具有1:1比例,因此X和Y上的(0,1)都需要精确相同数量的屏幕空间.无论我如何调整窗口大小,我都需要保持1:1的比例.)

Oli*_*ier 79

它有用吗:

plt.axis('equal')
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用`plt.axis('scaled')` (12认同)

小智 18

我确信,有一种方法可以直接将其设置为绘图命令的一部分,但我不记得这个技巧了.为此之后,您可以使用当前轴并将其宽高比设置为"set_aspect('equal')".在你的例子中:

import matplotlib.pyplot as plt
plt.fill(*zip(*polygon))
plt.axes().set_aspect('equal', 'datalim')
plt.show()
Run Code Online (Sandbox Code Playgroud)

我一直使用它,它来自matplotlib网站上的示例.

  • 也可以尝试`pylab.gca().set_aspect('equal','box')`.'box'调整*两个*的轴限制(没有空格,例如contourplot).'datalim'只调整其中一个限制(只有x或y空格消失).对于异国情调的共享轴也有"盒子强制". (2认同)

G M*_*G M 12

使用plt'缩放'

最好的用途是:

 plt.axis('scaled')
Run Code Online (Sandbox Code Playgroud)

正如Saullo Castro所说.因为相同而你不能改变一个轴限制而不改变另一个,所以如果你想要适合所有非平方数字,你将有很多空白区域.

等于

在此输入图像描述

缩放

在此输入图像描述

'平等'没法的斧头

或者,您可以使用轴类.

fig = plt.figure()
ax = figure.add_subplot(111)
ax.imshow(image)
ax.axes.set_aspect('equal')
Run Code Online (Sandbox Code Playgroud)