【问题标题】:Plotting a list of 3D points in SymPy在 SymPy 中绘制 3D 点列表
【发布时间】:2016-05-28 22:11:44
【问题描述】:

如果我有一个 3D 点列表,请说

pts = [(0,0,0),(1,0,0),(0,2,0),(0,0,3)]

我想使用 SciPy 来绘制它们,我该怎么做?我试过了

plot3d([Point(0,0,0),Point(1,0,0),Point(0,2,0),Point(0,0,3)], (x, -5, 5), (y, -5, 5))

但这会导致此错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-54-851ee4534010> in <module>()
----> 1 plot3d([Point(0,0,0),Point(1,0,0),Point(0,2,0),Point(0,0,3)], (x, -5, 5), (y, -5, 5))

/usr/lib/python3.5/site-packages/sympy/plotting/plot.py in plot3d(*args, **kwargs)
   1618     series = []
   1619     plot_expr = check_arguments(args, 1, 2)
-> 1620     series = [SurfaceOver2DRangeSeries(*arg, **kwargs) for arg in plot_expr]
   1621     plots = Plot(*series, **kwargs)
   1622     if show:

TypeError: 'NoneType' object is not iterable

理想情况下,该解决方案将绘制具有这些顶点的多面体(四面体),或将它们与线段连接。

【问题讨论】:

    标签: python matplotlib scipy ipython


    【解决方案1】:

    您可以使用scatter 绘制这些点。如果你想用线段连接它们,一种可能的方法是先绘制点然后连接它们,如下所示:

    import matplotlib as mpl
    from mpl_toolkits.mplot3d import Axes3D
    import numpy as np
    import matplotlib.pyplot as plt
    import itertools
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    
    # plotting the points
    pts = [(0,0,0),(1,0,0),(0,2,0),(0,0,3)]
    for p in pts:
        ax.scatter(p[0], p[1], p[2], zdir='z', c='r')
    
    # plotting lines for each point pair
    for a, b in itertools.product(pts, pts):
        x = np.linspace(a[0], b[0], 100)
        y = np.linspace(a[1], b[1], 100)
        z = np.linspace(a[2], b[2], 100)
        ax.plot(x, y, z)
    
    ax.legend()
    ax.set_xlim3d(0, 1)
    ax.set_ylim3d(0, 2)
    ax.set_zlim3d(0, 3)
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 2021-03-06
      • 1970-01-01
      相关资源
      最近更新 更多