Данные XYZ для сглаживания трехмерной поверхности - PullRequest
0 голосов
/ 22 марта 2020

Я хочу сделать трехмерную поверхность из X, Y, Z (lan, long, deep).

Я использую 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, но у меня есть) переименовать его)

oldaimage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...