通过 Sympy 中的参数图绘制具有等轴的完美球体
Plot a perfect sphere with equal axes by parametric plot in Sympy
我想知道如何在 Sympy 中使用 plot3d_parametric_surface 我们可以绘制一个完美的球体。我所说的完美是指轴相等。这个函数的结果是椭圆形的!
from sympy import *
from sympy.plotting.plot import plot3d_parametric_surface
from sympy.abc import theta , phi
plot3d_parametric_surface(sin(phi)*cos(theta) , sin(phi)*sin(theta), cos(phi), (phi,0,pi),(theta,0,2*pi))
我尝试实现 matplotlib (equal unit length): with 'equal' aspect ratio z-axis is not equal to x- and y- 中的答案,但没有成功。
主要问题之一是 ax.set_aspect('equal')
在 matplotlib 中还 not implemented。当前版本的 matplotlib (3.1) 在调用 set_aspect('equal')
时会立即引发显式错误。旧版本给出了一个非常错误的投影,尽管用户通常没有意识到这个错误。关于在 3D 中设置相等纵横比的其他 Whosebug 答案只是将 xyz 限制设置为相等,这使您更接近所需的结果,但不是完全相等的投影。
解决方法是手动设置图形轴,直到球体具有所需的纵横比。这很麻烦,因为绘图维度包括轴标签和填充的 space。
例如,将 figsize 设置为 6, 5.6
似乎很顺利
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()
我想知道如何在 Sympy 中使用 plot3d_parametric_surface 我们可以绘制一个完美的球体。我所说的完美是指轴相等。这个函数的结果是椭圆形的!
from sympy import *
from sympy.plotting.plot import plot3d_parametric_surface
from sympy.abc import theta , phi
plot3d_parametric_surface(sin(phi)*cos(theta) , sin(phi)*sin(theta), cos(phi), (phi,0,pi),(theta,0,2*pi))
我尝试实现 matplotlib (equal unit length): with 'equal' aspect ratio z-axis is not equal to x- and y- 中的答案,但没有成功。
主要问题之一是 ax.set_aspect('equal')
在 matplotlib 中还 not implemented。当前版本的 matplotlib (3.1) 在调用 set_aspect('equal')
时会立即引发显式错误。旧版本给出了一个非常错误的投影,尽管用户通常没有意识到这个错误。关于在 3D 中设置相等纵横比的其他 Whosebug 答案只是将 xyz 限制设置为相等,这使您更接近所需的结果,但不是完全相等的投影。
解决方法是手动设置图形轴,直到球体具有所需的纵横比。这很麻烦,因为绘图维度包括轴标签和填充的 space。
例如,将 figsize 设置为 6, 5.6
似乎很顺利
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()