matplotlib 如何创建3D曲面图

cx6n0qe3  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(144)

我参考了 www.example.com 。我能够绘制一个三维散射,但只要我试图绘制一个三维表面,它打破了很多不同的错误。我修复了错误,但我得到了新的错误。经过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需要都是2D数组,但我不确定需要输入的值。
我试着以[SA,FZ],[FZ,FY]和[SA,FY]的顺序制作二维数组,但失败了,我还试着让SA和FY等于1。.n但这也不起作用。

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

2d数组应该由哪些值组成?任何帮助都很感激。

a11xaf1n

a11xaf1n1#

看看这个3d表面的示例代码:http://matplotlib.org/examples/mplot3d/surface3d_demo.html
首先,您必须创建两个规则网格X和Y(2d数组),以使用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)

然后,创建表示表面i的值的2d数组Z。e.

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

你的FZ数组必须是二维的,并且与X, Y数组具有相同的形状。
绘图后:

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

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

相关问题