如果我使用此代码段绘制一个圆圈
from sympy import *
x, y = symbols('x y')
p1 = plot_implicit(Eq(x**2 +y**2, 1),aspect_ratio=(1.,1.))
我会得到一个像这样的数字窗口
现在纵横比不是我所期待的,因为我看到的是椭圆而不是圆形。此外,如果我改变窗口的宽高比(拖动窗口的右下角),我也得到了图的宽高比的变化......下面的图像就是我的内容拖动角落后看到一个圆圈:
我想设置一个类似你在Matlab设置axis equal
时得到的情节,在绘制椭圆时看http://it.mathworks.com/help/matlab/creating_plots/aspect-ratio-for-2-d-axes.html
我错过了什么?
我正在使用Jupyter,笔记本服务器的版本是4.1.0并且正在运行:Python 2.7.11 | Anaconda 2.5.0(64位)| (默认,2015年12月6日,18:08:32)[GCC 4.4.7 20120313(红帽4.4.7-1)]
答案 0 :(得分:2)
我不确定Sympy的稳定API是否涵盖了这一点,但您可以提取matplotlib的图形和轴实例,并使用标准的matplotlib调用来改变图形的外观:
import matplotlib.pyplot as plt
import sympy as sy
x, y = sy.symbols('x y')
p1 = sy.plot_implicit(sy.Eq(x**2 +y**2, 4))
fg, ax = p1._backend.fig, p1._backend.ax # get matplotib's figure and ax
# Use matplotlib to change appearance:
ax.axis('tight') # list of float or {‘on’, ‘off’, ‘equal’, ‘tight’, ‘scaled’, ‘normal’, ‘auto’, ‘image’, ‘square’}
ax.set_aspect("equal") # 'auto', 'equal' or a positive integer is allowed
ax.grid(True)
fg.canvas.draw()
plt.show() # enter matplotlib's event loop (not needed in Jupyter)
答案 1 :(得分:1)
现在在2019年9月,此代码有效:
import matplotlib.pyplot as plt
import sympy
x, y = sympy.symbols('x y')
plt.ion() #interactive on
p1 = sympy.plot_implicit(sympy.Eq(x**2 +y**2, 4), block = False)
fg, ax = p1._backend.fig, p1._backend.ax # get matplotib's figure and axes
# Use matplotlib to change appearance:
ax.axis('tight') # list of float or {‘on’, ‘off’, ‘equal’, ‘tight’, ‘scaled’, ‘normal’, ‘auto’, ‘image’, ‘square’}
ax.set_aspect("equal") # 'auto', 'equal' or a positive integer is allowed
ax.grid(True)
plt.ioff() #interactive off
plt.show()
答案 2 :(得分:0)
在plot_implicit
的帮助中,提到了x_var
和y_var
- 参数。使用它们可以手动设置x轴和y轴的限制。如果适当缩放这些限制,则可以获得均匀的宽高比
from sympy import *
x, y = symbols('x y')
scal = 3840/2400 # corresponds to your screen resolution
a = 1.05
p1 = plot_implicit(Eq(x**2+y**2,1),title='with xlim and ylim\n',\
xlim=(-1,1), ylim=(-1,1),aspect_ratio='equal')
p2 = plot_implicit(Eq(x**2+y**2,1),title='with x_var and y_var\n',\
x_var=(x,-a*scal,a*scal), y_var=(y,-a,a))
(My Sympy-version:1.1.1)