Как сгладить Plotly 3D поверхность графика? - PullRequest
0 голосов
/ 18 октября 2019

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

Это код, который я пробовал:

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

Xa = np.linspace(29.005,29.405,200)
Ya = np.linspace(-93.6683,-93.2683,200)

db = oceansdb.ETOPO()
dcont = db['topography'].extract(lat=Xa, lon=Ya)
depth = dcont['height']

fig = go.Figure(data=[go.Surface(z=depth, x=Xa, y=Ya)])
fig.show()

Я пыталсяscipy.interpolate.griddata для сглаживания сюжета, но в сюжете ничего не меняется.

1 Ответ

1 голос
/ 19 октября 2019

Я не думаю, что интерполяция - это то, что вам нужно, потому что, если вы интерполируете в шумных точках, она все равно будет шумной. В библиотеке scipy.ndimage есть несколько хороших алгоритмов сглаживания (я покажу, что это простое сглаживание по Гауссу).

import plotly.graph_objects as go
import oceansdb
import numpy as np 
import scipy.ndimage

Xa = np.linspace(29.005,29.405,200)
Ya = np.linspace(-93.6683,-93.2683,200)

db = oceansdb.ETOPO()
dcont = db['topography'].extract(lat=Xa, lon=Ya)
depth = dcont['height']

sigma = [4, 4]
print(sigma)
depthSmooth = scipy.ndimage.filters.gaussian_filter(depth, sigma)

fig = go.Figure(data=[go.Surface(z=depthSmooth, x=Xa, y=Ya)])
fig.show()

Вы можете изменить значение sigma, чтобы изменить объем сглаживания (больше * 1006). * означает более сглаживание и список [sigmax, sigmay]).

...