如何在Python matplotlib中使x轴和y轴的比例相等?


128

我希望在方形图上画线。

天秤x-axisy-axis应该是相同的。

例如x的范围是0到10,在屏幕上是10厘米。y也必须在0到10的范围内,并且也必须是10 cm。

即使我迷失了窗口大小,也必须保持正方形。

目前,我的图形与窗口大小一起缩放。

我该如何实现?

更新:

我尝试了以下操作,但没有成功。

plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.axis('equal')

它为我工作。您可以张贴一个无效的完整代码示例吗?您能解释什么不起作用吗?您是否只想要相同的规模?还是同样的范围?
joris 2013年

1
@joris基本上我想要一个固定的SQUARE图。即使最大化窗口,也希望保留SQUARE。我的屏幕很宽,在最大化窗口后,图形也变为矩形。我想这是仍然SQUARE
Sibbs赌博

同样,您可以发布完整的代码示例。因为给出的答案应该这样做,所以将其保存为正方形。不保留其宽度或高度,而是保留其形状。
13年

1
与其他人在SO上互动时,请尽量减少磨擦。您会从人们的善意中获得帮助,因此应少做一些有权做的事情。
塔卡斯韦尔2013年

对于3D,您需要做的一点点额外的工作:stackoverflow.com/questions/13685386/...
特雷弗·博伊德·史密斯

Answers:


179

您需要对api进行更深入的研究:

from matplotlib import pyplot as plt
plt.plot(range(5))
plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.gca().set_aspect('equal', adjustable='box')
plt.draw()

set_aspect的文档


4
太棒了!它确实确实像魅力。你能告诉我是什么plt.plot(range(5))plt.gca().set_aspect('equal', adjustable='box')做什么,如果你不介意吗?另外,我注意到即使没有plt.draw(),该图仍会显示。那有什么用呢?
西伯斯赌博

plot只是有一些显现。有关set_aspect阅读文档链接。本draw是只是为了确保它得到呈现。
塔卡斯韦尔2013年

1
绘制一些虚假数据(它应该绘制一条直线)。
tacaswell

1
@ perfectionm1ng不用担心,花了我一段时间才弄清楚您的要求。
tacaswell

1
有没有一种方法可以完成此操作而不必确切指定限制?我希望会有一个简单的命令来获得具有相同比例和两个刻度的刻度的正方形图。谢谢
困惑

70
plt.axis('scaled')

对我来说效果很好。


也为我工作。只需在设置限制/刻度之前确保使用此功能,因为它将自动重新缩放。
安德鲁

3
抱歉,plt.axis('scaled')在Python 3.7和matplotlib中对我不起作用-matplotlib == 3.1.0但是,plt.axis('square')可以工作!
里希·in那(Rishi Jain)

19

尝试类似的方法:

import pylab as p
p.plot(x,y)
p.axis('equal')
p.show()

这在我的系统上有效,也许您可​​以显示正在处理的代码的一部分?可能能够帮助更快地解决问题。
Dman2

通常这不起作用。轴是相等的,但绘图不是正方形,除非绘图窗口也是正方形。与Matplotlib 2.0进行测试
divenex

P.axis('equal')好像是P.gca().set_aspect('equal', adjustable='datalim')。如果为adjustable='box',则图变为正方形。
Evgeni Sergeev '18

我绝对不会从中得到一个方框。
彼得·德雷克

pylab已弃用
eric

19

文档plt.axis()。这个:

plt.axis('equal')

不起作用,因为它更改了轴的界限以使圆看起来是圆形。您想要的是:

plt.axis('square')

这将创建具有相等轴的正方形图。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.