我已经提到过matplotlib.org和很多线程,但是我无法绘制3D曲面。我能够绘制3d散点图,但是一旦尝试绘制3d曲面,它就会因许多不同的错误而破裂。我修复了错误,但是又得到了新的错误。经过两天的战斗,我相信我对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]的顺序制作2d数组,但是失败了,我也尝试使SA和FY等于1..n,但这也不起作用。
ax.plot_surface( SA, FY ,Z)
plt.show()
2d数组应由什么值组成?任何帮助表示赞赏。
查看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)
然后,创建代表表面值的2d数组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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句