Python 使用matplotlib从地形数据创建平滑曲面打印

Python 使用matplotlib从地形数据创建平滑曲面打印,python,matplotlib,Python,Matplotlib,我有一个从lat、lon和elev数据创建3d地形曲面的代码 我使用的是ax.plot\u surface,它创建的地形表面如下所示: 我想对数据进行平滑处理,以创建更像这样的图片: 是否有更好的方法平滑网格所做的插值 my_数据按[lat,lon,elev]大小排序(912,3) 代码如下 import os import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt

我有一个从lat、lon和elev数据创建3d地形曲面的代码

我使用的是
ax.plot\u surface
,它创建的地形表面如下所示:

我想对数据进行平滑处理,以创建更像这样的图片:

是否有更好的方法平滑网格所做的插值

my_数据按[lat,lon,elev]大小排序(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)

可以将插值方法从“最近”替换为“立方体”。它给你一个更好的表面

zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='cubic')