我有三个txt文件经度,纬度和温度(或假设三个列表经度,纬度,温度)在英国从分散的气象站。我想首先插入这些数据以得到一个漂亮的彩色地图的温度。然后,我想这个温度插值层只有在土地面具(因此在不列颠群岛和不是在海的那边)。这有可能与Python和如何?
3答案
这是非常简单的numpy
,scipy.interpolate.griddata
,matplotlib
。这是一个例子:
进口matplotlib。pyplot一样plt进口numpy np从scipy.interpolate进口griddata #数据坐标和值x = np.random.random (100) y = np.random.random (100) z = np.random.random(100) #目标网格插入ξ=易= np.arange(0、1.01、0.01),易= np.meshgrid (xi, yi) #组面具面罩= (xi > 0.5) & (xi < 0.6) &(易> 0.5)& (yi < 0.6) #插入子= griddata (x, y, z, (xi, yi)方法=“线性”)#面具的子领域(面具)= np。南#地块图= plt.figure () ax = fig.add_subplot (111) plt.contourf (xi,咦,子,np.arange (0、1.01、0.01)) plt.plot (x, y,“k”。) plt.xlabel(“习”,字形大小= 16)plt.ylabel(“易”,字形大小= 16)plt.savefig (interpolated.png, dpi = 100) plt.close(图)
结果:
如何使用:
x
和y
点——这些对应的位置吗朗
和纬度
你站的值;z
点的值,这对应于你的体温从站观测;习
和易
目标网格轴——这将是你的目标经度和纬度坐标,必须匹配你landmask领域;子
是结果;- 这个例子包含一个简单的方法来掩饰。你应该取代这面具landmask网格。
还请注意方法
参数griddata
。除了线性
,这也可以立方
或最近的
。我建议你玩每个看看产生最好的结果的数据集。
-
\ begingroup美元 谢谢你,。有一个简单的方法来使用matplotlib情节只有在这片土地?显然我不能使用(掩码= (xi > 0.5) & (xi < 0.6) &(易> 0.5)& (yi < 0.6))来定义landmask的英国, \ endgroup美元- - - - - -达沃Keppas2017年8月12日13:15
-
\ begingroup美元 你需要屏蔽的数据,如二维场0在水和1。如果你没有,你可以做一个基于地形数据,例如ETOPO 01为此,我经常使用。 \ endgroup美元- - - - - -milancurcic2017年8月12日在15:21
-
-
6\ begingroup美元 @StavrosKeppas在某些时候你必须尝试做它你自己。如果你在这里,或在GIS课件,或在stackoverflow,你应该试着去做它最好你可以。“我需要请写程序”的问题往往置之不理。学会使用python的最好方法是尝试一段时间。如果它不工作,然后你把你的代码不工作和寻求援助。这显示努力这是一个重要的安全措施,并有可能鼓励更多有用的答案。此外,你可以问你喜欢尽可能多的(好)的问题,不要让扩展问题的评论。 \ endgroup美元- - - - - -uhoh2017年8月13日开始
-
\ begingroup美元 我想这适应resmple CFD结果粗网格。这是优秀的单值z(如温度)。如果z是一个速度,这将有三个值向量组件。我不考虑插值,只是想把最近的价值。想法吗? \ endgroup美元- - - - - -非常2019年5月23日在14
你有很多的选择。
这个简单任务的最简单的解决方案是使用一个GIS软件,例如自由QGIS。添加分隔文本图层栅格插值。下载一个免费的海岸线向量和剪辑你的光栅的海岸线。一些搜索GIS SE可以帮助你如果你困。GIS选项,它也很容易情节如城市或位置提取温度插值。
或者(根据你的更新问题),您可以使用Python。这将在某种程度上给你更多的控制你的工作流。基础图是一个有用的方案,如见。本教程的一个开始。Python也是自由和有一个伟大的社区SE和其他地方。numpy和scipy是好包对插值和所有数组的过程。对于更复杂的空间过程(剪辑的光栅矢量多边形。)GDAL是一个伟大的图书馆。
您还可以使用R,这可能是一个明智的解决方案如果您打算做一些统计分析后的更高要求。有一些教程可以让你在正确的轨道上。
格林尼治时间也应该能够做出你需要的有吗python接口,至少在发展。
可能,你想花一些精力挑选合适的插值方法,确保你的网格是实际值的最佳估计。
享受你的地图制作!
更新:
我认为GIS将第一种方法,但当你要求一些Python命令,这是一个草率的例子如何使用Python,基础图和scipy您的应用程序。它可以大大提高通过创建一个从shapefile和面具,如前所述,一个敏感的插值方法的使用。
进口numpy scipy.interpolate进口从mpl_toolkits griddata np。技术进口技术导入matplotlib。pyplot plt #定义mapframe lllon = -11 lllat = 49 urlon = 2 urlat = 61 #做一些玩具数据,随机分+角落n = 10 #没有电台lat = np.random。制服(低= lllat + 2、高= urlat-2大小= n) lat = np。append (lat, [lllat、urlat urlat, lllat])朗= np.random。制服(低= lllon + 2、高= urlon-2大小= n)朗= np。附加(经度,[lllon、urlon lllon, urlon]) temp = np.random.randn (n + 4) + 8 #英国夏天?#设置技术选择投影!m =基础图(投影=“芝加哥”,决议=“我”,llcrnrlon = lllon llcrnrlat = lllat urcrnrlon = urlon urcrnrlat = urlat) #变换坐标地图投影m m_lon m_lat = m(*(经度、纬度))#生成网格数据numcols numrows = 240, 240ξ= np.linspace (m_lon.min (), m_lon.max (), numcols)易= np.linspace (m_lat.min (), m_lat.max (), numrows) xi,彝族= np。meshgrid (xi, yi) #插入,有更好的方法,尤其是如果你有很多据点子= griddata ((m_lon m_lat)、温度(xi, yi)方法=“立方”)无花果、ax = plt。次要情节(figsize =(12日12))#画地图的细节。drawmapboundary (fill_color =天蓝色,zorder = 1) #地块内插温度。contourf (xi,咦,子,500年提出=“岩浆”,zorder = 2) m。drawlsmask (ocean_color =天蓝色,land_color =(0, 0, 0, 0),湖泊= True, zorder = 3) cbar = plt.colorbar () plt.title(温度)plt.show ()
(这是修改代码,用于别的东西。详细的问题,其他论坛更suitible。)
首先你必须读取数据例如在matlab。然后你就可以得到整个领域内插函数griddata matlab。,还存在landmask功能,允许您进一步的情节你喜欢的地图。
是的这是可能的和有必要的功能至少在matlab和我猜,在其他语言。