Python: Поверхностный график не правильно представляет набор данных - PullRequest
1 голос
/ 25 марта 2020

В настоящее время я пытаюсь создать трехмерный график поверхности на основе некоторых топографических данных c, которые я взял. Данные состоят из позиции GPS на основе UTM. Затем я создал me sh, интерполировал, используя метод ближайшего соседа, и нанес на поверхность с использованием графика. Моя главная проблема связана с тем, что мой график поверхности очень остроконечный, тогда как график рассеяния только необработанных точек больше похож на то, что я хочу. Для справки это данные топографии c о 4 дюнах на пляже.

Я думаю, что я сузил проблему до метода интерполяции, но я просто не знаю, как это исправить, чтобы график будет более гладким.

Заранее благодарим за любые советы / предложения.

import numpy as np
import plotly.graph_objects as go
import pandas as pd
from scipy.interpolate import griddata

# Read Data
eBAD = pd.read_csv('EastBeachAllDunes20190202.txt', header = None, delimiter = ',')
eBAD.columns = ["Point #","Northing","Easting","Zed","NaN"]
eBAD = pd.DataFrame(data = eBAD)

# Define Variables
x = np.array(eBAD.Easting)
y = np.array(eBAD.Northing)
z = np.array(eBAD.Zed)

# Creating Mesh
xi = np.linspace(min(x), max(x))
yi = np.linspace(min(y), max(y))
X, Y = np.meshgrid(xi, yi)
Z = griddata((x, y), z, (xi[None,:], yi[:,None]), method='nearest')

# Plot Scatter of Raw GPS Data 
fig = go.Figure(data=[go.Scatter3d(x=x, y=y, z=z,mode='markers')])
#fig.update_layout(scene_aspectmode='data')
fig.update_layout(scene_aspectmode='manual',
                  scene_aspectratio=dict(x = 5, y = 5, z = 0.5))
fig.show()

# Plot Surface Using Mesh
fig2 = go.Figure(data=[go.Surface(x = xi, y = yi, z=Z)])
#fig2.update_layout(scene_aspectmode='data')
fig2.update_layout(scene_aspectmode='manual',
                  scene_aspectratio=dict(x = 5, y = 5, z = 0.5))
fig2.show()

# Plot Surface Using Mesh
fig3 = go.Figure(data=[go.Surface(x = xi, y = yi, z=Z),go.Scatter3d(x=x, y=y, z=z,mode='markers')])
#fig2.update_layout(scene_aspectmode='data')
fig3.update_layout(scene_aspectmode='manual',
                  scene_aspectratio=dict(x = 5, y = 5, z = 0.5))
fig3.show()

Scatter Plot

Поверхность Plot

Диаграмма рассеяния на поверхности. Здесь вы можете видеть, что более высокие точки не создают хорошую визуализацию поверхности.

...