用symphy中的参数图绘制等轴理想球面

2024-04-25 13:15:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何在Symphy中使用plot3d_参数曲面绘制完美球体。我所说的完美是指轴相等。此函数的结果为椭圆形

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

enter image description here

我试图在matplotlib (equal unit length): with 'equal' aspect ratio z-axis is not equal to x- and y-中实现答案,但没有成功


Tags: fromimport参数pisinequalcossurface
1条回答
网友
1楼 · 发布于 2024-04-25 13:15:08

主要问题之一是ax.set_aspect('equal')在matplotlib中仍然是not implemented。matplotlib(3.1)的当前版本在调用set_aspect('equal')时立即引发显式错误。旧版本给出了一个非常错误的投影,尽管用户通常没有意识到错误。关于在3D中设置相等纵横比的其他StackOverflow答案只是将xyz限制设置为相等,这样可以使您更接近所需的结果,但不是完全相等的投影

解决方法是手动设置地物轴,直到球体具有所需的纵横比。这很麻烦,因为打印尺寸包括轴标签和填充的空间

例如,将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))

resulting plot

插入一个不可见的框(如果您没有绘制球体),只需一条对角线即可:

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

相关问题 更多 >