加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用matplotlib从地形数据创建平滑的曲面图

发布时间:2020-12-20 13:08:09 所属栏目:Python 来源:网络整理
导读:我有一个代码,可以从lat,lon和elev数据创建一个3d地形表面. 我正在使用ax.plot_surface,它创建一个如下所示的地形表面: 我想平滑数据以创建一个看起来更像这样的图片: 有没有更好的方法来平滑网格所做的插值? my_data按[lat,lon,elev]大小排序(912,3) 代
我有一个代码,可以从lat,lon和elev数据创建一个3d地形表面.

我正在使用ax.plot_surface,它创建一个如下所示的地形表面:

plot1

我想平滑数据以创建一个看起来更像这样的图片:

plot2

有没有更好的方法来平滑网格所做的插值?

my_data按[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,method='cubic')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读