En el trazado de sympy, ¿cómo puedo obtener un gráfico con una relación de aspecto fija?

Si trazo un círculo con este fragmento

from sympy import * x, y = symbols('x y') p1 = plot_implicit(Eq(x**2 +y**2, 1),aspect_ratio=(1.,1.)) 

Obtendré una ventana de figura como esta

introduzca la descripción de la imagen aquí

Ahora la relación de aspecto no es lo que esperaba porque veo una elipse en lugar de un círculo. Además, si cambio la relación de aspecto de la ventana (arrastrando la esquina inferior derecha de la ventana) también obtengo un cambio en la relación de aspecto de la ttwig … La siguiente imagen es lo que obtengo después de arrastrar la esquina en orden para ver un circulo:

introduzca la descripción de la imagen aquí

Me gustaría obtener un gráfico como el que se obtiene en Matlab cuando establece un axis equal , consulte http://it.mathworks.com/help/matlab/creating_plots/aspect-ratio-for-2-d-axes.html cuando trazas una elipse

introduzca la descripción de la imagen aquí

¿Qué me estoy perdiendo?

Estoy usando Jupyter y la versión del servidor de notebook es 4.1.0 y se ejecuta en: Python 2.7.11 | Anaconda 2.5.0 (64 bits) | (predeterminado, 6 de diciembre de 2015, 18:08:32) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]

No estoy seguro de si esto está cubierto en la API estable de Sympy, pero puede extraer la instancia de figura y eje de matplotlib y usar las llamadas estándar de matplotlib para cambiar la apariencia de su gráfico:

 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) 

Esto da: Eje apretado con relación de aspecto igual

En la ayuda para plot_implicit , se mencionan los x_var y y_var . El uso de ellos le permite establecer límites manuales para los ejes x e y. Si escala esos límites adecuadamente, puede lograr una relación de aspecto uniforme.

 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)) 

(Mi versión Sympy: 1.1.1)