matplotlib.pyplot,保持图形的纵横比
假设我们有一个多边形的坐标,格式是 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')