如何在Spyder中使用Python设置绘图的纵横比?

3
我刚从Matlab转到Python,对Python还不熟悉。我使用的是Anaconda 2.1.0版本,并使用自带的Spyder IDE进行开发。
我想绘制一个散点图,使得x轴和y轴具有相等的比例,这样代码可以打印一个正方形图形,并在其中绘制一个正六边形的顶点。
import numpy
import cmath
import matplotlib

coeff = [1,0,0,0,0,0,-1]
x = numpy.roots(coeff)

zeroplot = plot(real(x),imag(x), 'ro')
plt.gca(aspect='equal')
plt.show()

但是plt.gca(aspect='equal')返回一个带有坐标轴[0,1,0,1]的空白图形,plt.show()则没有返回任何内容。

1个回答

3

我认为主要问题是plt.gca(aspect='equal')不仅会获取当前轴并设置其纵横比。从文档中(help(plt.gca))可以看到,如果当前轴没有正确的纵横比,它似乎会创建一个新的轴,因此立即修复此问题的方法应该是将plt.gca(aspect='equal')替换为:

ax = plt.gca()
ax.set_aspect('equal')

我还要提一下,由于你使用了 pylab 来自动加载 numpymatplotlib 函数,所以我在运行你的代码时遇到了一些小问题:我不得不将我的版本更改为:

import numpy
import cmath
from matplotlib import pyplot as plt

coeff = [1,0,0,0,0,0,-1]
x = numpy.roots(coeff)

zeroplot = plt.plot(numpy.real(x), numpy.imag(x), 'ro')
ax = plt.gca()
ax.set_aspect('equal')
plt.show()

根据我的经验,已经熟悉Python的人通常不使用Pylab。如果别人没有意识到你正在使用Pylab或不熟悉它的工作原理,以后你可能会发现很难获得帮助。我建议禁用它,并尝试通过它们各自的模块访问所需的函数(例如,使用numpy.real而不是只使用real)。


太好了!非常感谢。我不习惯通过模块调用函数,但如果这样做更好的话,我想我会逐渐习惯的。一开始我避免使用它,但现在几天过去了,我对语法更加熟悉了,这已经不是问题了。再次感谢。 - Andrew
是的,我理解为什么Pylab存在,以及为什么对于从MATLAB转移过来的人来说它似乎很有吸引力,但从长远来看,我觉得它是一个净负面,因为它使得与不使用它的所有人分享代码和获得帮助变得更加困难。 - Marius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接