matplotlib -> 插值绘地形图(方案一)

使用平滑曲面插值对原始数据进行处理,并使用等高线填充图绘制地形图详细解读

np.mgrid函数

grid_x, grid_y = np.mgrid[min(x):max(x):100j, min(y):max(y):100j]

np.mgrid是NumPy的一个函数,用于在多个维度上生成均匀间隔的网格点,返回一个多维数组对象。在你的代码中,np.mgrid函数用于生成两个二维数组grid_xgrid_y,这两个数组中的元素组成了平面上的坐标点,用于对你的数据进行插值和绘图。

具体来说,np.mgrid函数的调用方式如下:

np.mgrid[start:stop:step, start:stop:step, ...]

其中,start表示起始点,stop表示终止点,step表示步长。这个函数会在每个维度上生成一个一维数组,这些数组组合成的多维数组即为网格坐标点的集合。例如,对于二维平面来说,np.mgrid函数可以这样使用:

grid_x, grid_y = np.mgrid[x_min:x_max:step_x, y_min:y_max:step_y]

其中,x_minx_max分别是平面在x轴上的起始点和终止点,y_miny_max分别是平面在y轴上的起始点和终止点,step_xstep_y分别是x轴和y轴上的步长。这个函数会在x轴和y轴上生成一维数组grid_xgrid_y,这两个数组中的元素组成了平面上的坐标点。这些坐标点的数量由step_xstep_y参数决定,数量越多,网格越密集,插值的精度也就越高。

在你的代码中,grid_xgrid_y的生成方式为:

grid_x, grid_y = np.mgrid[min(x):max(x):100j, min(y):max(y):100j]

其中,min(x)max(x)分别是数据点在x轴上的最小值和最大值,min(y)max(y)分别是数据点在y轴上的最小值和最大值。这个函数会在x轴和y轴上生成一维数组grid_xgrid_y,这两个数组中的元素组成了平面上的坐标点。因为使用了100j参数,所以在每个维度上生成100个坐标点,也就是说,生成的网格共有$100\times100=10000$个坐标点。这些坐标点的数量越多,插值的精度也就越高。 

griddata函数 

grid_z = griddata((x, y), z, (grid_x, grid_y), method='linear')

(x, y):
表示数据点的坐标。它们应该以一维数组或者列表的形式传入,其中分别包含了每个数据点的x和y坐标。
z:
表示数据点的值。它应该以一维数组或者列表的形式传入,其中包含了每个数据点的值。
(grid_x, grid_y):
表示网格点的坐标。它们应该以二维数组的形式传入,其中grid_x和grid_y分别表示网格点的x和y坐标。griddata函数会在这些网格点上进行插值操作。

method(默认值为linear):

  1. nearest:最近邻插值方法,对应于距离样本点最近的网格点的值。
  2. linear:线性插值方法,对应于使用距离样本点最近的三个或四个网格点之间的线性函数进行插值。
  3. cubic:三次样条插值方法,对应于使用距离样本点最近的六个或十个网格点之间的三次样条函数进行插值。

注意:

nearest方法计算速度最快,但插值结果不够平滑;
cubic方法插值结果最平滑,但计算速度较慢;
linear方法则是速度和精度之间的一种平衡选择。

ax.contourf()函数

ax.contourf(grid_x, grid_y, grid_z, levels=300, cmap=my_colormap)

ax.contourf()是Matplotlib中用于绘制等高线填充图的函数,用于在二维平面上绘制网格数据的颜色填充图

  • xy:表示网格数据的x轴和y轴坐标,可以是一维数组或二维数组;
  • z:表示网格数据的值,也可以是一维数组或二维数组;
  • levels:表示等高线的数量或高度值,可以是一个整数或一维数组,如果是整数,则表示等高线数量,如果是一维数组,则表示等高线的高度值;
  • cmap:表示颜色映射表,用于将网格数据的值映射到颜色空间中,可以使用Matplotlib中的任意一种颜色映射表;
  • alpha:表示填充颜色的透明度,取值范围为0~1;
  • extend:表示颜色映射表是否延伸到数据范围之外,可以是'neither'、'both'、'min'、'max'中的一个,分别表示不延伸、延伸到数据范围的两端、仅延伸到数据范围的最小值、仅延伸到数据范围的最大值;
  • antialiased:表示是否使用抗锯齿技术,即平滑边缘,取值为True或False。

 注意:

1.xyz三个参数是必须的,而levelscmap可以根据需求设置。alphaextendantialiased是可选参数,如果不设置则使用默认值。

2.xyz三个参数的维度必须相同,且都是二维数组时,才能使用ax.contourf()函数绘制等高线填充图。

此外,ax.contourf()函数还有其他的一些参数,例如colorslinewidthslinestyles等,用于控制等高线填充图的颜色、线宽和线型等绘图属性。(matplotlib.axes.Axes.contourf — Matplotlib 3.8.4 documentation

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fyhs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值