我有一段代码,可以从纬度、经度和高程数据创建一个3D地形表面。
我使用
是否有更好的方法来平滑 mesh grid 所做的插值?
我的数据按 [纬度、经度、海拔] 排序,大小为 (912,3)。
以下是代码:
我使用
ax.plot_surface
,它可以创建一个类似于下图的地形表面:
我希望能够平滑数据,以创建一个更像这样的图片:
![plot2](https://istack.dev59.com/v7hUn.webp)
我的数据按 [纬度、经度、海拔] 排序,大小为 (912,3)。
以下是代码:
import os
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
fig = plt.figure()
ax = Axes3D(fig)
my_data = np.genfromtxt('2014_0.01_v3_HDF5.txt', delimiter = ',', skip_header = 1)
my_data[my_data==0] = np.nan
my_data = my_data[~np.isnan(my_data).any(axis=1)]
X = my_data[:,0]
Y = my_data[:,1]
Z = my_data[:,2]
xi = np.linspace(X.min(),X.max(),(len(Z)/3))
yi = np.linspace(Y.min(),Y.max(),(len(Z)/3))
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='nearest')
xig, yig = np.meshgrid(xi, yi)
surf = ax.plot_surface(xig, yig, zi, cmap='gist_earth')
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_title('2014 ATM Data 0.01 Degree Spacing')
ax.set_xlabel('Latitude')
ax.set_ylabel('Longitude')
ax.set_zlabel('Elevation (m)')
ax.set_zlim3d(0,8000)