爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5727|回复: 1

[源代码] 探索【二维插值法】,实现等值线图准确美观

[复制链接]

新浪微博达人勋

发表于 2022-6-20 14:20:57 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
1、需求缘起


工作中,我们常需要对大片的气象站、空气站数据做插值处理,
很多画图工具默认用三角网插值法,
这种插值法的优点是,插值图与原始数据比较接近,速度快,缺点是,等值线条不平滑。
现在,我们需要一种既平滑美观,又准确的二维插值法,即站点需要位于等值线的峰谷位置。

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2022-6-20 14:34:16 | 显示全部楼层
2、美观但不准的scipy.interpolate.interp2d

三角网与interp2d的插值效果如下,散圆点代表原始数据,
由图可见,interp2d仅仅是美观,插值结果的值和位置都对不上。

三角网pkinterp2d.png

源代码:

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt

# 生成xyz作为画图数据:
x = np.linspace(-100,0,5)
y = np.linspace(100,300,8)
xx, yy = np.meshgrid(x, y)

z=np.random.randint(13,19,(len(y),len(x)))

# 以下函数根据xyz的数据,自动获得z=f(x,y)中的函数f:
f = interpolate.interp2d(x, y, z, kind='cubic')

# 再准备x2和y2:
x2=np.linspace(np.min(x),np.max(x),100)
y2=np.linspace(np.min(y),np.max(y),100)
# 用f计算出值:
z2= f(x2, y2)

# 拟合前:
plt.subplot(1,2,1)
plt.contourf(x,y,z,cmap='jet')
plt.colorbar()
plt.scatter(xx,yy,z,c=z,cmap='jet')

# 拟合后:
plt.subplot(1,2,2)
plt.contourf(x2,y2,z2,cmap='jet')
plt.colorbar()
plt.scatter(xx,yy,z,c=z,cmap='jet')

plt.show()



密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表