Matlab利用M

您所在的位置:网站首页 matlab怎么绘制网格图 Matlab利用M

Matlab利用M

2024-06-25 22:06| 来源: 网络整理| 查看: 265

Matlab利用M_map和mapshow绘制网格地图

最近在做利用网格数据绘制’Lambert‘投影的地图,之前没有系统的利用matlab做过相关的工作,花了几天时间,问了专业的同学,最终整理了两种画图的方法。

1、M_map工具箱画图 首先,系统里要安装有m_map的工具箱。我下载的是1.4b版本的,具体下载方法百度可以搜索到。 (1)下载相关网址https://www.eoas.ubc.ca/~rich/map.html (2)下载好需要把工具箱解压移动到自己安装matlab的’toolbox’里。

安装位置:

安装位置 (3)代码记录

// An highlighted block var foo = 'bar'; %% 画图 lat_lon=csvread('D:\学习资料\处理数据\lat_londata.csv'); lat=lat_lon(:,1); lon=lat_lon(:,2); lat=reshape(lat,122,252); lon=reshape(lon,122,252);%这一步处理是因为我数据里面的经纬度是两列数据,需要将经纬度处理成二维数组 %% 设置投影,坐标系网格等等... m_proj('Lambert','longitudes',[-75 -6],'latitudes',[58 85]); m_grid('xlim',[-70,-10],'xtick',-70:10:-10,'ylim',[60,80],'ytick',60:10:80,... 'linewidth',1,'tickdir','in','box','fancy',... 'fontsize',10,'fontweight','bold');hold on;% GL=shaperead('D:\学习资料\格陵兰岛\greenland\greenland.shp','UseGeoCoords',true); %% 绘制shp文件(plot是面,patch是线) boux=[GL(:).Lon];bouy=[GL(:).Lat]; m_plot(boux,bouy,'color',[0.85,0.85,0.85],'Linewidth',0.1); m_patch(boux,bouy,[0.85,0.85,0.85]);%'yellow''k-'%这两句代码是mapshow的功能 hold on %% 填色环节,注意A数据是我自己需要使用的栅格数据,和Lon以及lat是对应关系 m_pcolor(lon,lat,A); hold on;

(4)注意点 m_map是工具箱,因此使用的时候注意使用到的函数都是‘m_’开头的,例如填色的时候千万不能使用pcolor,而使用worldmap画框的画,则用pcolorm填色。其他的函数暂时还没注意到。 数据边框没处理好是我自己数据的问题,下面的shp文件画出来被填色遮挡住了,此外,这是格陵兰岛0.25度网格绘制的结果最终呈现结果还不错,数据边框没处理好是我自己数据的问题,下面的shp文件画出来被填色遮挡住了,此外,这是格陵兰岛0.25度网格绘制的结果

2、geoshow-worldmap画图

这个是matlab自带的功能,也需要和上文的工具箱的函数完全分开!! 这里也是分了两种画图的方法 不说了,直接上代码=v= 方法一:先创建坐标轴。坐标轴的参数可以参照下面链接 (1)https://zhuanlan.zhihu.com/p/526463769 (2)https://ww2.mathworks.cn/help/map/ref/axesm-properties.html 官方帮助文档

// An highlighted block ax1=axesm('MapProjection','Lambert','MapLatLimit',[58 85],'MapLonLimit',[-75 -10],... 'Frame','on','flinewidth',2,'Grid','on', 'FontName', 'Times', 'FontSize', 10,... 'MLineLocation',10,'PLineLocation',10,'ParallelLabel','on','MeridianLabel','on');%创建坐标轴 setm(gca,'flinewidth',2,'Grid','on', 'GLineWidth', 1,'FontName','times new roman','Frame','on');%修改轴的属性,看了帮助文档就可以知道,其实这句代码里面的参数完全可以合并到上一句axesm里面了哈哈,只不过自己学习,写着看看效果。“注意,定义好坐标轴也就不需要再用worldmap打开一个范围内的坐标轴了,就是这两段函数和wordlmap是两种方法,选择一种即可” GL=shaperead('D:\学习资料\格陵兰岛\greenland\greenland.shp','UseGeoCoords',true); geoshow(GL,'facecolor',[0.85,0.85,0.85],'Edgecolor',[0.85,0.85,0.85]);%这里 axis off;%不加这段代码的话,图就太丑了,轴的刻度线就超过了画图范围 hold on lat_lon=csvread('D:\学习资料\处理数据\lat_londata.csv'); lat=lat_lon(:,1); lon=lat_lon(:,2); lat=reshape(lat,122,252); lon=reshape(lon,122,252); t=geoshow(lat,lon,A,'DisplayType','texturemap'); set(t,'FaceAlpha','texturemap','AlphaData',double(~isnan(A))); hold on

在这里插入图片描述 在这里插入图片描述

3、geoshow的第二种画图方法

其实呈现的结果都是一样的,只不过是geoshow函数的形式不同

// An highlighted block refvec=[4 89.625 -73.125];%286.875 t=geoshow(gca,A,refvec,'displaytype','texturemap'); set(t,'FaceAlpha','texturemap','AlphaData',double(~isnan(A))); hold on

refvec只是定义了一个画图的范围,具体表示含义如下 在这里插入图片描述

4、画图中的注意点

(1)我使用的格网数据里包括了NaN值,在m_map里函数自动不填色,但是在geoshow里面会填上其他的颜色,影响作图效果,经过查阅资料,这句代码可以完美解决,但是具体的参数含义目前没有搞明白,其他解决方案可见https://ww2.mathworks.cn/matlabcentral/answers/253209-hide-nans-in-geoshow

// An highlighted block set(t,'FaceAlpha','texturemap','AlphaData',double(~isnan(A)));

(2)利用geoshow画图的时候,试图修改经纬度轴线为黑白相交的线,查了一上午完全没发现解决办法,所以对于我画图的结果m_map和geoshow的唯一画图的区别也就是这里吧= =.如果有知道怎么解决的,请私信或者评论区教教我,不胜感激 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3