【问题标题】:3d surface in matplotlibmatplotlib 中的 3d 曲面
【发布时间】:2016-10-11 18:49:52
【问题描述】:

我参考了 matplotlib.org 和很多线程,但我无法绘制 3d 曲面。我能够绘制 3d 散点图,但是一旦我尝试绘制 3d 表面,它就会因许多不同的错误而中断。我修复了错误,但我得到了新的。在与它战斗了 2 天之后,我相信我对 matplotlib 3d 表面的理解是错误的。

我想绘制 SA、FZ、FY

其中 SA 是 X,FZ 是 Y,FY 是 Z

 while y<Last_Row:
    if 100 < Temp_AVG_Dict[y] and Temp_AVG_Dict[y] < 140 and abs(Camber[y])<5 and 24.5<Speed[y] and Speed[y]<25.5:
        y = y + 1

        SA[SArow:]=[Run_50_sheet.cell_value( y , SA_Column)]
        SArow = SArow + 1

        FY[FYrow:] = [Run_50_sheet.cell_value( y , FY_Column)]
        FYrow = FYrow + 1

        FZ[FZrow:] = [Run_50_sheet.cell_value( y , FZ_Column)]
        FZrow = FZrow + 1

        Z.insert(SArow,[SA[SArow-1], FZ[FZrow-1], FY[FYrow-1]])

    else:
        y=y+1

Z= np.array(Z)


fig = plt.figure(1)
ax = fig.add_subplot(111, projection='3d')

下面这一行是我认为我出错的地方。 X,Y,Z 都需要是二维数组,但我不确定需要输入的值。

我尝试按 [SA,FZ]、[FZ,FY] 和 [SA,FY] 的顺序制作二维数组,但失败了 我也尝试让 SA 和 FY 等于 1..n,但这也没有用。

ax.plot_surface( SA, FY ,Z)
plt.show()

二维数组应该由什么值组成? 任何帮助表示赞赏。

【问题讨论】:

    标签: python matplotlib 3d mplot3d


    【解决方案1】:

    查看 3d 表面的示例代码:http://matplotlib.org/examples/mplot3d/surface3d_demo.html

    首先,您必须创建两个常规网格 X 和 Y(二维数组)以使用 plot_surface 进行绘图,如下所示:

    X = np.arange(-5, 5, 0.25) # X, Y are 1d arrays
    Y = np.arange(-5, 5, 0.25)
    X, Y = np.meshgrid(X, Y)   # Now X, Y are 2d arrays
    

    尝试为你的一维数组FA(如果是x)、FY(如果是y)制作网格:

    X, Y = np.meshgrid(FA, FY)
    

    然后,创建代表表面值的二维数组 Z,即

    Z = np.sin(np.sqrt(X**2 + Y**2))
    

    您的 FZ 数组必须是 2d 并且具有与 X, Y 数组相同的形状。

    剧情后:

    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
                           linewidth=0, antialiased=False)
    

    如果您的网格不规则,请查找plot_trisurf:http://matplotlib.org/examples/mplot3d/trisurf3d_demo.html

    【讨论】:

    • Z 是否需要像示例中那样是 X 和 Y 的函数?我的 Z 值来自数据集,所以我无法为其编写函数
    • 不,在我的示例中,Z 是一个二维数组,其形状与 X 和 Y 相同。您可以写成 z[0,0]=.5 等。
    • 感谢斯坦利,我可以用 3D 绘图了!我现在遇到的问题是绘图是 4 或 5 个单独的平面,xy 轴上有一个平面。我预料到了这一点,因为除了由坐标 X、Y 修改的值之外,我创建的 Z 数组的值都为零。有没有办法插入某种值?我尝试了 trisurf 方法,但库没有正确加载。如果我说的内容难以想象,我将在明天早上拿到电脑充电器时发布一张照片。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多