09 - matlab m_map地学绘图工具基础函数 - 绘制区域填充、伪彩色、加载图像和绘制浮雕效果的有关函数
- 0. 引言
- 1. 关于m_pcolor
- 2. 关于m_image
- 3. 关于m_shadedrelief
- 4. 关于m_hatch
- 5. 结语
0. 引言
本篇介绍下m_map
中区域填充函数(m_hatch
)、绘制伪彩色图的函数(m_pcolor
)、地图上加载图像函数(m_image
)、绘制阴影浮雕效果函数(m_shadedrelief
)。
1. 关于m_pcolor
m_pcolor函数
用于在地图上绘制伪彩色图。它类似于matlab的pcolor
函数,但是可以在地图投影上绘制。
m_pcolor函数
的一般形式为:
function [h]=m_pcolor(long,lat,data,varargin)
其中:long、lat
绘图区域经纬度坐标点;data
绘图数据,每个数据点的值决定了对应位置的颜色。
下面是一个简单示例,使用了GLDAS水文数据
为数据源,测试数据在网盘中,提取码为n67r。:
% 解析数据
ncFilePath = 'GLDAS_NOAH10_M.A200602.021.nc4';
lon = ncread(ncFilePath,'lon');
lat = ncread(ncFilePath,'lat');
soilmoi_data = ncread(ncFilePath,'SoilMoi0_10cm_inst');
[LN,LT]=meshgrid(lon,lat);
% 定义投影
m_proj('mercator','long',[69.5 105.5],'lat',[24.5 40.5]);
% 在地图上绘制伪彩色图
m_pcolor(LN,LT, soilmoi_data');
% 添加边界
m_gshhs('ic','color',[.5 .5 .5]) % 中等分辨率海岸线
m_gshhs('ir2','color','k') % 中等分辨率河流
m_grid('linestyle','none','tickdir','out');
colorbar;
2. 关于m_image
m_image函数
用于在地图投影上显示图像。这个函数可以将图像数据投影到地图坐标系上,以便与其他地图数据进行比较或叠加。借助谷歌地图、高德地图等一些列地理数据库API,可以将一些卫星数据加载到绘图区域。
m_image函数
的一般形式为:
m_image(lon,lat,C,varargin)
其中,lon、lat
图像数据配准到地图上的位置;C
图像的颜色数据矩阵,可以是RGB彩色图像,也可以是灰度图像;varargin
可选参数,如resolution可以控制图像显示精度,通过插值方式将图像的显示像素转化到
N
∗
N
N*N
N∗N。
m_map官网
提供了一个加载谷歌地图的示例,经过尝试未能复现,这里用了一个普通图片作为数据源,将图片加载到地图的指定位置,以下是一个简单示例:
clc;clear;
% % 读取图像文件
lms=[ -123-[14 8]/60 49+[10 13.5]/60 ];
m_proj('utm','lat',lms(3:4),'lon',lms(1:2));
imageData = imread('m_coast.jpg');
% 定义图像在地图上的经纬度范围
lonRange = [-123.12 -123.23];
latRange = [49.16 49.22];
% 在地图上显示图像
m_image(lonRange, latRange, imageData);
% 添加网格
m_grid('linestyle','none','tickdir','out');
3. 关于m_shadedrelief
m_shadedrelief函数
用于在地图投影上绘制阴影浮雕效果以展示地形。这个函数可以帮助你将地图呈现为立体感强烈的样式,增强地图的视觉效果。
m_shadedrelief函数
的一般形式为:
[Truecol,x,y]=m_shadedrelief(x,y,Z,varargin)
其中,x、y
为水平竖直方向向量,z
为高度数据,x y z
的单位需统一;varargin
为可选参数。需要注意的是m_shadedrelief
函数调用之前必须先执行caxis
与colormap
两个函数,且为了显示立体效果,需要计算对位点的梯度。
m_shadedrelief函数
的一些可选参数比较讲究,理解比较浅,需要进一步了解的可以在m_map
中查看有关资料或注释。
下面是来自官网的一个示例,数据的链接可以在网盘中获取,提取码为:tgvf。
clat=[48+46/60 49+5/60];clon=[-125-15/60 -124-55/60]; % Barkley Sound
%% Read data from a netcdf file
fname='barkley_sound_1_navd88_2016.nc';
lat=ncread(fname,'lat');
lon=ncread(fname,'lon');
ilat=lat>=clat(1) & lat<=clat(2);
ilon=lon>=clon(1) & lon<=clon(2);
Z=ncread(fname,'Band1',[ find((ilon),1,'first') find((ilat),1,'first')],...
[ sum(ilon) sum(ilat)],[1 1]);
m_proj('equidistant','lon',clon,'lat',clat); % Projection
% The shaded relief version (right hand plot))
subplot(1,2,2);
caxis([-300 1210]); % 1210 chosen by manual adjustment
% since 'waterline" appears to be at about Z=2 (vertical datum for
% bathymetry is 'lowest normal tide')
colormap([m_colmap('blues',32);m_colmap('gland',128)]); % Colormap sizes chosen because...
% ... 32/128 = (300+2)/(1210-2)
m_shadedrelief(lon(ilon),lat(ilat),Z');
m_grid('box','fancy','grid','none','fontsize',14);
m_contfbar( [.3 .7],.98, Z',[-300:1210],...
'axfrac',.02,'endpiece','no','levels','match','edgecolor','none');
% The normal contour version (left hand plot))
subplot(1,2,1);
m_contourf(lon(ilon),lat(ilat),Z',[-300:25:-25 2 50:50:200 300:100:1200 1210]);
caxis([-300 1210]);
colormap([m_colmap('blues',32);m_colmap('gland',128)]);
m_grid('box','fancy','tickdir','out','grid','none','fontsize',14);
m_contfbar( [.3 .7],.98, Z',[-300:25:-25 2 50:50:200 300:100:1200 1210],...
'axfrac',.02,'endpiece','no','levels','match');
对比两幅图,第二幅图加了阴影浮雕效果,视觉效果更好。
4. 关于m_hatch
m_hatch函数
用于在地图上填充指定区域。这个函数通常与其他 m_map 函数一起使用,比如 m_contourf
用于填充等值线区域,m_patch
用于绘制多边形区域等。
m_hatch(lon,lat,hatchpattern)
其中,lon 和 lat
分别是指定区域的经度和纬度坐标,hatchpattern
是填充图案的类型,常用的填充图案包括:
'single', 45, 5
用单线条填充,线条朝向45°,控制每2根单线条之间的间距为5;'cross', 45, 5
用交叉线填充,线条朝向45°,控制每2根单线条之间的间距为5;'speckle',7,1
斑点填充到研究区内,离内边界7个单位的距离作为填充区域,填充散点的密度为1;'outspeckle',7,1
斑点填充到研究区外,离外边界7个单位的距离作为填充区域,填充散点的密度为1;
除此之外,还有一些控制线条样式、颜色等的参数也可以被设置。
下面为m_hatch函数
的使用示例,并展示了四种不同图案填充的效果:
bndry_lon=[-128.8 -128.8 -128.3 -128 -126.8 -126.6 -128.8];
bndry_lat=[49 50.33 50.33 50 49.5 49 49];
clf;
m_proj('lambert','long',[-130 -121.5],'lat',[47 51.5],'rectbox','on');
m_gshhs_i('color','r'); % Coastline...
m_gshhs_i('speckle','color','k'); % with speckle added
m_line(bndry_lon,bndry_lat,'linewi',2,'color','m'); % Area outline ...
% m_hatch(bndry_lon,bndry_lat,'single',30,5,'color','k'); % 单线填充
% m_hatch(bndry_lon,bndry_lat,'speckle',7,1,'color','k'); % 区域内斑点填充
% m_hatch(bndry_lon,bndry_lat,'outspeckle',7,1,'color','k'); % 区域外斑点填充
m_hatch(bndry_lon,bndry_lat,'cross',30,5,'color','k'); % 双线填充
m_grid('linewi',2,'linest','none','tickdir','out','fontsize',12);
title({'Speckled Boundaries','for nice B&W presentation','(best in postscript format)'});
m_text(-128,48,{'Pacific','Ocean'},'fontsize',18);
m_northarrow(-122.5,50.2,.8,'type',3,'linewi',2);
|
|
|
|
5. 结语
本篇介绍了m_map
中绘制多边形区域函数(m_patch
)、区域填充函数(m_hatch
)、绘制伪彩色图的函数(m_pcolor
)、地图上加载图像函数(m_image
)、绘制阴影浮雕效果函数(m_shadedrelief
),通过示例展示了各函数的基本用法,对于绘制常见地学图已经够用了,后面若发现还有其它相关函数再进行补充。希望对绘图的你有所帮助
😜
😜😜
😜😜😜😜