【问题标题】:Plot a perfect sphere with equal axes by parametric plot in Sympy在 Sympy 中通过参数图绘制具有等轴的完美球体
【发布时间】:2020-02-21 16:43:56
【问题描述】:

我想知道如何在 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- 中实现答案,但没有成功。

【问题讨论】:

    标签: python matplotlib sympy aspect-ratio


    【解决方案1】:

    主要问题之一是 ax.set_aspect('equal') 在 matplotlib 中是 not implemented。一旦调用 set_aspect('equal'),当前版本的 matplotlib (3.1) 就会引发显式错误。旧版本给出了一个非常错误的投影,尽管用户通常没有意识到这个错误。其他有关在 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))
    

    插入一个不可见的盒子(如果你没有画一个球体),可以只用一条对角线来实现:

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

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多