Одна из основных проблем состоит в том, что ax.set_aspect('equal')
- это , но он не реализован в matplotlib. Текущие версии matplotlib (3.1) вызывают явную ошибку, как только вызывается set_aspect('equal')
. Старые версии давали совершенно неверные прогнозы, хотя часто пользователь не знал об ошибке. Другие ответы StackOverflow об установке равного соотношения сторон в 3D просто устанавливают равные пределы xyz, что приближает вас к желаемому результату, но не является полностью равной проекцией.
Обходной путь - вручную установить ось фигуры пока сфера не имеет желаемого соотношения сторон. Это громоздко, потому что размеры графика включают пространство для меток осей и для заполнения.
Например, установка размера 6, 5.6
кажется go лункой
from sympy import sin, cos, pi
from sympy.plotting.plot import plot3d_parametric_surface
from sympy.abc import theta, phi
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = 6, 5.6
plot3d_parametric_surface(sin(phi) * cos(theta), sin(phi) * sin(theta), cos(phi),
(phi, 0, pi), (theta, 0, 2 * pi))
Вставка невидимого поля (если вы не рисуете сферу), может быть достигнуто только с помощью диагональной линии:
from sympy import sin, cos, pi
from sympy.plotting.plot import plot3d_parametric_surface, plot3d_parametric_line
from sympy.abc import theta, phi, t
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = 6, 5.6
p1 = plot3d_parametric_surface(sin(phi) * cos(theta), sin(phi) * sin(theta), cos(phi),
(phi, 0, pi), (theta, 0, 2 * pi), show=False)
p2 = plot3d_parametric_line(t, t, t, (t, -1, 1), line_color='none', show=False)
p1.append(p2[0])
#p1.backend(p1).ax[0].set_aspect('equal') # this raises a NotImplementedError
p1.show()