matplotlib.pyplot,保持图形的纵横比

62 投票
4 回答
81875 浏览
提问于 2025-04-15 23:19

假设我们有一个多边形的坐标,格式是 polygon = [(x1, y1), (x2, y2), ...],下面的代码可以用来显示这个多边形:

import matplotlib.pyplot as plt
plt.fill(*zip(*polygon))
plt.show()

默认情况下,这段代码会尝试调整显示比例,让多边形(或者其他图形)适应窗口的大小,并且在你调整窗口大小时会自动调整。这在很多情况下都很好,但如果你想要直观地判断图像是否变形,就会有问题。那怎么才能让显示比例严格保持1:1呢?

(我不确定“显示比例”这个词用得对不对,所以如果不对的话,我的意思是:我希望X轴和Y轴的比例都是1:1,这样在X和Y上(0, 1)占据的屏幕空间是完全一样的。而且无论我怎么调整窗口大小,这个1:1的比例都要保持不变。)

4 个回答

19

我相信有一种方法可以直接在绘图命令中设置这个,但我不记得具体的技巧了。如果想在绘图后调整,可以使用当前的坐标轴,并通过“set_aspect('equal')”来设置它的比例。在你的例子中:

import matplotlib.pyplot as plt
plt.fill(*zip(*polygon))
plt.axes().set_aspect('equal', 'datalim')
plt.show()

我经常使用这个方法,还是从matplotlib网站上的示例学来的。

38

使用plt进行“缩放”

最好的方法是使用:

 plt.axis('scaled')

正如Saullo Castro所说的那样。因为使用“equal”时,你不能单独调整一个坐标轴的范围,这样会影响到另一个坐标轴。如果你想让所有的图形都适应显示,就会出现很多空白区域。

Equal

在这里输入图片描述

Scaled

在这里输入图片描述

使用ax进行“equal”

另外,你可以使用axes类

fig = plt.figure()
ax = figure.add_subplot(111)
ax.imshow(image)
ax.axes.set_aspect('equal')
108

使用这个有帮助吗:

plt.axis('equal')

撰写回答