我想从X,Y,Z(lan,long,depth)生成一个三维曲面
我使用3D散射,得到这样的散射scatter plot
所以我想做一个3d曲面,从它附近的X和Y位置进行插值,图形会生成平滑的3d曲线,我就是这样做的
这是我的密码
from openpyxl import load_workbook
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import math
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
from scipy import interpolate
from scipy.interpolate import interp2d
kebenaran = True
kebenaranz = True
wb = load_workbook(filename = 'olda.xlsx')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
sheet = wb['Sheet1']
SumbuX = []
SumbuX2 = []
SumbuY = []
SumbuY2 = []
SumbuZ = []
i = 3
while (kebenaran):
DatX = sheet.cell(row=i, column=11).value
DatY = sheet.cell(row=i, column=12).value
DatZ = sheet.cell(row=i, column=5).value
if DatX == None :
kebenaran = False
else :
SumbuX.append(DatX)
SumbuY.append(DatY)
SumbuZ.append(DatZ)
i = i + 1
x1 = math.floor(min(SumbuX))
y1 = math.floor(min(SumbuY))
x2 = math.ceil(max(SumbuX))
y2 = math.ceil(max(SumbuY))
X = np.linspace(x1, x2, 3342)
Y = np.linspace(y1, y2, 3342)
xm,ym = np.meshgrid(X, Y)
for i in range(len(SumbuZ)):
Xdot = math.ceil(SumbuX[i])
Ydot = math.ceil(SumbuY[i])
if Xdot < 0 :
CalcX = Xdot*2*(-1) + Xdot
if Ydot < 0:
CalcY = Ydot*2*(-1) + Ydot
else :
CalcY = Ydot*2 + Ydot
else :
CalcX = Xdot*2 + Xdot
if Ydot < 0:
CalcY = Ydot*2*(-1) + Ydot
else :
CalcY = Ydot*2 + Ydot
SumbuX2.append(CalcX)
SumbuY2.append(CalcY)
arrX = np.asarray(SumbuX2)
arrY = np.asarray(SumbuY2)
arrZ = np.asarray(SumbuZ)
panjangZ = len(arrZ)
dot = np.column_stack((arrX,arrY))
grid_z0 = interpolate.griddata(dot, arrZ, (xm, ym), method='nearest')
surf = ax.plot_surface(X, Y, grid_z0)
plt.show()
这是我的数据(olda.xlsx) https://github.com/irfanrah/BathymetryKapal/blob/master/15:24:46.xlsx(olda.xlsx,但我还没有重命名它)
目前没有回答
相关问题 更多 >
编程相关推荐