| 
 
	积分338贡献 精华在线时间 小时注册时间2011-10-19最后登录1970-1-1 
 | 
 
| 
本帖最后由 hut171 于 2019-4-12 15:31 编辑
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  
 本人试过Python scipy.interpolate中各个插值方法,最后发现RBF方法还算差强人意,但是仍然存在一点问题
 
 首先读取的txt文件格式为每一行“经度,纬度,降水”
 当行数在386行(包括386行)以内的时候,可以正常做出落区图
 当超过386行后,就成花图了。
 
 请教坛里大神帮忙看下什么原因,怎么能够调好,毕竟区域站超过386个还是很正常的
 
 
 复制代码import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import Rbf
from mpl_toolkits.basemap import Basemap
def leves_colors():  # 设置色标方法2
    levels = [0, 0.000000001, 1.5, 7, 15, 40, 50]
    colors = ['#FFFFFF', '#A6F28F', '#3DBA3D', '#61B8FF', '#0000E1', '#FA00FA', '#800040']
    return levels, colors
filename = r'E:\qls\2019022604.txt'
file = np.loadtxt(filename, delimiter=',', dtype='str')
# lon = file[:, 0].astype(np.float).reshape(-1, 1)
lon = file[:, 0].astype(np.float)
lat = file[:, 1].astype(np.float)
rain = file[:, 2].astype(np.float)
result = np.ma.masked_greater(rain, 999989)
olon = np.linspace(104, 112, 300)
olat = np.linspace(31, 40, 300)
olon, olat = np.meshgrid(olon, olat)
func = Rbf(lon, lat, result, function='linear')
rain_data_new = func(olon, olat)
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111)
m = Basemap(llcrnrlon=105, llcrnrlat=31, urcrnrlon=112, urcrnrlat=40, projection='cyl')
m.readshapefile('./Map/Shaanxi/Shaanxi_province', 'Shaanxi', default_encoding='utf-8')
xx, yy = m(olon, olat)
levels, colors = leves_colors()
c = m.contourf(xx, yy, rain_data_new, levels=levels, colors=colors, extend='max')
m.colorbar(c)
plt.show()
plt.close()
数据文件示例,调试时可以在后面复制这些数据108.88,34.08,3.9
 108.87,34.17,3.5
 108.95,34.14,3.2
 108.1,34.09,2.1
 108.07,34.13,2.1
 108.32,34.07,2.1
 108.04,34.14,2
 108.73,34.17,2
 108.19,34.05,1.9
 108.02,33.61,1.8
 108.41,33.99,1.8
 108.17,34.08,1.7
 108.89,34.2,1.7
 
 附件传错了,不知道怎么删除,大家千万不要下载,浪费金币
 
 | 
 |