科学网

 找回密码
  注册

tag 标签: m_map

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

Matlab m_map一张地图上使用用多个colormap以及patch精细岸线数据去除河流
热度 2 xiaoxin960904 2019-12-10 15:35
主修物理海洋学,有变量空间场的画图需求,这是遇到的一些细节问题,部分灵感来自于网络。 本人在画陆地数据加温盐场的图时,需要调用两个colormap,这有很多种解决办法; 普通的2014b以后的版本来讲,对于一个ax1 = axes(),ax2 = axes(); 两个坐标轴上的绘图可以直接用colormap(ax1,'jet') colormap(ax2,'gray')来控制; 但是遇到和m_map工具包加上了m_grid之后坐标轴问题就会比较麻烦; 本人当成一个黑箱在用,并不想去读并改其源代码,所尝试的可行的有两种: 两幅图拼接成一个colorbar,实际上就是拼接成一个colormap,实现起来太麻烦了 第二种利用一个大佬 John Iversen 写的FreezeColors程序包,上传到了matlab官方,以下是一个例子 https://ww2.mathworks.cn/matlabcentral/fileexchange/7943-freezecolors-unfreezecolors?requestedDomain=zh 上面两幅图分别是只画了陆地高程和海表温度,图很丑只做例子凑合看。部分画图代码如下 figure,hold on m_proj('Miller','lon', ,'lat', ) m_contourf(x,y,z', ,'linestyle','none','levelstep',.1);% 陆地高程 m_grid('box','fancy','xtick', ,'ytick', ,'linestyle','none',... 'linewidth',0.5,'backcolor','none'); colormap( ); caxis( ) colorbar figure,hold on m_proj('Miller','lon', ,'lat', ) m_contourf(lon,lat,sst','linestyle','none','levelstep',.1);% 海表温度 m_grid('box','fancy','xtick', ,'ytick', ,'linestyle','none',... 'linewidth',0.5,'backcolor','none'); colormap('jet'); caxis( ) colorbar 把两个图凑到一起该咋办,利用FreezeColors加在哪个位置坐标轴怎么设置都不行,很绝望 查了之前画的一个图,此图是水深m_pcolor与散点m_scatter画的 突然想到会不会是 不能用同一个画图命令m_contourf 的原因 单独修正陆地高程或两个绘图为m_pcolor就可以了,单修正海表温度为pcolor就不行 怀疑是contourf的问题 figure,hold on m_proj('Miller','lon', ,'lat', ) pc = m_pcolor (x,y,z');% 陆地高程 set(pc,'linestyle','none'); m_grid('box','fancy','xtick', ,'ytick', ,'linestyle','none',... 'linewidth',0.5,'backcolor','none'); colormap( ); freezeColors caxis( ) % m_contourf(lon,lat,sst','linestyle','none','levelstep',.1); pc = m_pcolor (lon,lat,sst');% 海表温度 set(pc,'linestyle','none'); colormap('jet'); caxis( ) colorbar 代码如上,图片如下,但是这幅图太丑了,决定不用陆地高程了 老老实实在加精细岸线的时候之前未解决的一个问题突然想去解决下,陆地上的河流湖泊看起来很丑 搞了半天,之前博文里提到了如何添加国界线,利用里面一行命令加岸线就能去掉了 代码和图: figure,hold on m_proj('Miller','lon', ,'lat', ) % m_gshhs_l('patch', ,'Edgecolor','none');% 只加这行会有河流对应左图 m_gshhs('lc1','patch', ,'Edgecolor','k');% 只加这行没有河流对应右图 m_grid('box','fancy','xtick', ,'ytick', ,'linestyle','none',... 'linewidth',0.5,'backcolor','none'); m_contourf(lon,lat,sst','linestyle','none','levelstep',.1); colormap('jet'); caxis( ) colorbar
个人分类: Matlab学习笔记|15517 次阅读|6 个评论
Matlab: install M_Map in mac
haibaraxx 2016-9-6 04:22
1. Download the M-Map zip archive file from https://www.eoas.ubc.ca/~rich/map.html 2. Unpack the zip archive and its sunfolder in the path: /Applications/MATLAB_R2015a.app/toolbox/ 1) find the Applications folder, right click it and left click Open Applications ; 2) find the icon Matlab_R2015a, right click it and left click Show Package Contents ; 3) double click the folder toolbox ; 4) move the unpacked M-Map folder to the folder toolbox . 3. Open Matlab GUI, and run the following command: addpath /Applications/MATLAB_R2015a.app/toolbox/m_map 4. Update the cache file using the command: rehash toolboxcache 5. Finish! Test M-Map using the commands: m_proj('oblique mercator'); m_coast; m_grid; M_map_GettingStarted.pdf
个人分类: Matlab|4790 次阅读|0 个评论
MATLAB 地图工具箱 m_map 的安装和入门技巧
YF2015 2015-12-26 16:42
需要用一些地图工具,arcgis懒得装了,GMT(generic mapping tools)太复杂,因此搜到了m_map, 正好是MATLAB的工具箱。于是研究 了一晚上。 一、m_map 工具箱的安装 http://www.eos.ubc.ca/~rich/map.html 以上网址是m_map工具箱的网站,找到m_map工具箱文件下下来,一共不到700k。名字叫 gzipped tar-file , or zip archive 下其中一个即可。 方法1. 解压,得到 m_map文件夹,把他放到你的MATLAB安装目录下, 即放在(MATLAB装在其他盘的请将C改为其他盘符): C:Program Files\MATLAB\R2012b\toolbox\m_map 然后打开 C:Program Files\MATLAB\R2012b\toolbox\local\ pathdef.m (如果有权限问题,一般是win7且MATLAB装在C盘会出现权限问题,那就在开始菜单找到记事本,右键,管理员运行,然后打开pathdef.m 文件) 将下面一句话加到 %%% BEGIN ENTRIES %%% 下面 matlabroot,'\toolbox\m_map', ... 最后,打开MATLAB,输入 rehash toolboxcache, 到此就安装好了m_map. 但是我测试了一下,把MATLAB关了重开,由于C盘有权限,MATLAB访问toolbox文件夹有限,于是安装不成功,但是如果你的MATLAB是在D盘,就没事。 方法2 目前一定能成功。后来我就自己开发了一个方法,无论你的MATLAB安装在哪个盘,将m_map 复制到除了C盘以外的任意一个盘,比如 D:\mymatlabfiles\m_map, 然后用记事本打开那个 pathdef.m, 然后在 %%% BEGIN ENTRIES %%% 下面加入下面的话: 'D:\ mymatlabfiles\m_map ;', ... 这样就不用每次打开MATLAB添加path了。 测试安装好与否的方法是 输入 what m_map, 如果显示了一堆m文件名字,即装好了,如果显示 not found,则没装好,这时候在MATLAB界面上找到 set path,我的是2012b,直接在上面就有,在preference的下面,然后add folder, 浏览到 C:Program Files\MATLAB\R2012b\toolbox\ m_map,然后save即可。 二、m_map 如何入门 首先运行了一个例子,语句是 m_proj('oblique mercator'); m_coast; m_grid; 意思是定义一个投影系统,名叫oblique mercator,注意,定义这个投影系统的时候他已经默默的将地球上的范围给定义了,这个例子是哥伦比亚的一个海岸,然后 第二句和第三句就是画图用的,画出海岸线和网格,第一句是不画图的。那么如何定义地球上的范围呢,往下看。 m_map 里面嵌有19个投影系统,名字如下所示,你首先要明白这19个系统长什么样。 proj{1}='Stereographic';proj{2}='Orthographic';proj{3}='Azimuthal Equal-area'; proj{4}='Azimuthal Equidistant';proj{5}='Gnomonic';proj{6}='Satellite'; proj{7}='Albers Equal-Area Conic';proj{8}='Lambert Conformal Conic';proj{9}='Mercator'; proj{10}='Miller Cylindrical';proj{11}='Equidistant Cylindrical';proj{12}='Oblique Mercator'; proj{13}='Transverse Mercator';proj{14}='Sinusoidal';proj{15}='Gall-Peters'; proj{16}='Hammer-Aitoff';proj{17}='Mollweide';proj{18}='Robinson'; proj{19}='UTM'; 这是我在MATLAB里把这19个名字弄到一个cell中了。然后我用了下列语句 1 j=1; 2 m_proj(proj{j}); 3 m_coast; 4 m_grid; 5 m_proj get 6 m_proj('set',proj{j}); 7 m_proj(proj{j},'longitudes',100, 'latitudes',0,'rad',90,'rec','circle','rot',0); 8 m_coast('patch', ,'edgecolor','r'); 9 m_grid('xlabeldir','end','fontsize',10); 重点就在这里,我以第一个投影系为例,j=1嘛,前4行是把这个投影系画出来看看是什么样,然后 m_proj get 是获取这个投影系的默认地理范围,可以看出是 center longitude: 0 center latitude: 60 radius/altitude : 90 Rectangular border: circle Rotation angle: 0 然后我再用m_proj('set',proj{j}); 命令,得到 'Stereographic' ,'lon',center_long ,'lat', center_lat ,'rad', ( degrees | ) | 'alt', alt_frac ,'rec', ( 'on' | 'off' | 'circle' ) ,'rot', degrees CCW 意思就是,如果你要是用'stereographic' 投影系的话,你可以定义'longitude', 'latitude', 'radius', 'rectbox' and 'rotangle'. 当然,如上面我写的第7行那个,可以用 'lon'代替'longitude'。 然后我就再第7行把lon设置为100,这时候就可以让伟大的中国在中间了。就是这样一个一个系统的去看,每个投影系定义的方式都不一样,其中有些是重复的,但是意义不同。同理,m_coast 和 m_grid 也是这样学习,然后在继续看m_map 网站的用户说明即可,网址是: http://www.eos.ubc.ca/~rich/private/mapug.html#p1 希望对你们有帮助,网上一些其他的教程太不负责任,只是将 User's guide 翻译了一下,翻译的还不怎么样。 MATLAB m_map toolbox
12103 次阅读|0 个评论
基于m_map的球面立体投影的MATLAB实现
热度 3 zjwang 2010-5-2 19:24
图1 假设的全球某成分分布 图2 北半球和南半球球面立体投影坐标系 以球面立体投影开始,这个在大气痕量成分分布产品中应用得非常多,能清楚明了地看到世界各地的某高度的浓度或总量分布。 一、下载 m_map 安装包, http://www.eos.ubc.ca/~rich/private/mapug.html 二、解压,然后通过MATLAB设置路径包含 m_map 三、投影坐标系绘制 1,首先定义投影方式 m_proj('stereographic','latitude',90,'radius',90,'rotagnle',0); ;投影名称为stereographic ;中心纬度为北纬90度 ;绘制纬度长度为90度,即从N90-0,如果radius为55的话,则绘制N90-N55的区域 ;坐标系旋转角度为0,即垂直方向为经度0度 2,绘制海岸线 m_coast('patch', , 'edgecolor', 'none'); ;填充区域颜色为 ,三个分量分别代表r,g,b,以小数表示,即255为1,0为0 ;边界无颜色 3,绘制边界、坐标轴等 m_grid; 四、绘制目标数据 1,数据准备 例如: 臭氧ozone = ,即有经度-180:180和纬度0:90的臭氧数据,即北半球数据 经度数据lon=0:180 纬度数据lat=0:90 将坐标其转化为网格 = meshgrid(lat, lon); 注意这里的lat和lon的顺序 现在lon = ,lat = ; 2,坐标转换 将经纬度坐标转换成投影后坐标 = m_ll2xy(lon,lat); 3,绘制目标数据 hold on; 一定不要忘记此句,否则前面的将全部覆盖 pcolor(lon,lat,ozone); shading interp; box on; 效果见图1. 几点注意的地方: 1,坐标转换时,给定的经纬度一定是投影范围内的点,否则得不到有效值。 2,纬度的范围是0-90,北纬为正,南纬为负。即-55表示南纬55度。 3,经度的范围是0-180度,东经为正,西经为负。 4,绘制南半球时,设置中心为S90,即-90。要想0也在竖起时,要设定旋转方向为180。 m_proj('stereographic','latitude',-90,'radius',90,'rotagnle',180); 5,绘制南半球时,要通过m_grid设置经度轴标在最外层,否则都聚焦在最里。 m_grid('xaxislocation','top'); 5、绘制目标数据之前,加上hold on;否则将绘制的坐标系全部覆盖了。
个人分类: 计算程序|14239 次阅读|5 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-23 11:10

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部