10 - matlab m_map地学绘图工具基础函数 - 绘制多边形区域、流线图、散点图和添加注释的有关函数
- 0. 引言
- 1. 关于m_patch
- 2. 关于m_streamline
- 3. 关于m_scatter
- 4. 关于m_annotation
- 5. 结语
0. 引言
本篇介绍下m_map
中绘制多边形区域函数(m_patch
)、绘制流线图函数(m_streamline
)、绘制散点图函数(m_scatter
)、添加注释函数(m_annotation
),其中添加注释的函数用的较多。
1. 关于m_patch
m_patch函数
可以用于绘制多边形区域,并可以使用命令对绘制的图形进行填充,如颜色、透明度等。
m_patch函数
的一般形式如下:
m_patch(lat, lon, cdata, varargin)
其中,lat 和 lon
是多边形各顶点的经维度坐标,以向量形式给出;cdata
是用于填充多边形的数据,可以是一个标量值或者一个与顶点数相同的向量;varargin
为可选参数用于设置填充区域的样式、边界等属性,如 EdgeColor
、FaceAlpha
、LineStyle
等。
下面是一个m_patch函数
的简单的示例,在前面介绍m_coast函数
的时候,介绍过对边界填充,输入的参数为“patch”
,其本质是在调用m_patch函数
为海岸线内填充颜色:
%% 示例2
figure(2)
m_proj('miller', 'lat', [-90 90], 'long', [-180 180]);
lat = [-90 0 90 0]; % 纬度
lon = [0 -100 0 100]; % 经度
cdata = 1;
% 绘制并填充多边形区域
m_patch(lon,lat,'red','FaceColor','green','edgecolor','red','linewidth',2);
m_grid('box','fancy','tickdir','in');
colormap(flipud(copper));
2. 关于m_streamline
m_streamline 函数
用于在地图上绘制流线。流线是指示流体运动方向的线条,通常用于可视化气象、海洋流动、风场等方向场的数据。
m_streamline函数
的一般形式如下:
m_streamline(lon, lat, u, v, varargin)
lon
和lat
是流场数据的经度和纬度坐标网格;u
和v
是经度和纬度方向上的流场速度分量网格;varargin
表示还有其他可选参数,如arrowsmode
表示是否绘制方向向量的朝向箭头,默认是绘制的,可以使用noarrowsmode
参数使箭头不绘制;如method
可以选择使用特定的插值方法,可以选择的插值方法有线形插值(linear
)、样条插值(Cubic
)和最近邻插值(nearest
);
下面示例模拟了一个场数据进行流线图的绘制:
figure;
m_proj('miller', 'lon', [69.5 105.5], 'lat', [24.5 40.5]);
% 在地图上绘制海岸线
m_coast('color', 'k');
colormap([m_colmap('land')])
m_etopo2('shadedrelief','lightangle',45);
% 生成一些模拟的经纬度数据
lon = 69.5:0.2:105.5;
lat = 24.5:0.2:40.5;
[lon_grid, lat_grid] = meshgrid(lon, lat);
% 生成一些模拟的流场数据,例如风场
u = cosd(lat_grid) .* cosd(lon_grid);
v = sind(lon_grid);
% 绘制流线图
m_streamline(lon_grid, lat_grid, u, v,'arrowsmode');
%m_streamline(lon_grid, lat_grid, u, v,'noarrowsmode','nearest');
% 添加标题和标签
title('流线图示例');
xlabel('经度');
ylabel('纬度');
m_grid
3. 关于m_scatter
m_scatter函数
用于在地图上绘制散点,即在地图上显示具有特定经纬度坐标的点。
h = m_scatter(long,lat,varargin)
其中,long,lat
表示绘制散点的投影坐标向量;varargin
可选参数,设置散点的颜色、轮廓、填充、线宽等属性。m_scatter函数
在底层调用了matlab的scatter函数
,所以可选参数大多和scatter
函数的一致。
m_scatter函数
绘图示例,通过填充、控制点的形状、控制点轮廓线宽等参数修改了散点的样式:
clf;
m_proj('lambert','long',[-130 -121.5],'lat',[47 51.5],'rectbox','on');
lon = [-121.98, -122.40, -126.62];
lat = [48.78, 49.77, 50.88];
sizes = [10, 20, 15]; % 指定每个点的大小
%m_scatter(lon, lat, sizes, 'Marker', 'o', 'Color', 'r') % 使用红色圆圈绘制散点图
m_scatter(lon, lat, sizes,'filled','Marker', 'o','LineWidth',2,'MarkerEdgeColor','r') % 使用红色圆圈绘制散点图
m_grid('linewi',2,'linest','none','tickdir','out','fontsize',12);
4. 关于m_annotation
m_annotation函数
用于在地图上添加注释。这个函数可以用来在地图上标记特定的地理位置、添加文本说明、绘制箭头等。
m_annotation函数
的一般形式如下:
h = m_annotation(varargin)
其中,varargin
表示所有参数均为可选参数。特定位置可以添加的图形样式如下:
-
'rectangle'
绘制矩形区域,m_annotation(‘rectangle’,lon_left, lat_botton, width, height) , lon_left, lat_botton表示绘图区域从左下开始,输入坐下位置的坐标点,width, height表示绘制的矩形的长宽值; -
'ellipse'
绘制椭圆区域, m_annotation(‘ellipse’,lon_left, lat_botton, width, height) ,,lon_left, lat_botton表示绘图区域从左下开始,输入坐下位置的坐标点,width, height表示绘制的椭圆的长短半轴长; -
'textbox'
绘制文本框, m_annotation(‘textbox’,lon_left, lat_botton, width, height) ,lon_left, lat_botton表示绘图区域从左下开始,输入坐下位置的坐标点,width, height表示绘制的文本框的长宽; -
'line'
绘制线,m_annotation(‘line’,lon,lat),其中lon,lat为投影坐标下的经纬度向量; -
'arrow'
绘制箭头,m_annotation(‘arrow’,lon,lat),其中lon,lat向量长度为2,表示绘制箭头的起止坐标; -
'doublearrow'
绘制双向箭头,m_annotation(‘doublearrow’,lon,lat),其中lon,lat向量长度为2,表示在两个坐标的位置绘制箭头; -
'textarrow'
绘制箭头并在尾端添加注释,m_annotation(‘textarrow’,lon,lat),其中lon,lat向量长度为2,表示绘制箭头的坐标和添加注释的坐标;
下面是一个示例,包含了上面提到的所有注释样式的使用方法:
close all;clc;clear;
m_proj('mercator', 'lon', [69.5 105.5], 'lat', [24.5 40.5]);
%%
h = m_annotation('arrow',[80.5,82.5],[34.5,32.5],'Color','r'); % 绘制两个坐标的箭头(投影坐标系)
h = m_annotation('line',[80.5,78.5],[34.5,30.5],'Color','g'); % 绘制两个坐标的直线(投影坐标系)
h = m_annotation('doublearrow',[80.5,78.5],[34.5,30.5],'Color','c'); % 绘制两个箭头的连线(投影坐标系)
th=annotation('textarrow',[0.3,0.6],[0.7,0.4],'String','ABC'); % 绘制箭头并在尾端注释(要求输入坐标归一化)
str = {'使用FitBoxToText属性','使文字紧贴边框'};
th=annotation('textbox',[0.6,0.35,0.3,0.3],'Color','r','String',str,'FontWeight','bold','FitBoxToText','on'); % [x y w h] 形式的四元素向量。前两个元素指定文本框、矩形或椭圆的左下角相对于图窗左下角的坐标。后两个元素分别指定注释的宽度和高度。
th=annotation('textbox',[0.6,0.3,0.2,0.2],'Color','r','String',{'不使用','FitBoxToText属性'},'FontWeight','bold');
th=annotation('rectangle',[0.2,0.4,0.1,0.2],'Color','#7E2F8E'); % 绘制矩形区域
th=annotation('ellipse',[0.2,0.2,0.4,0.1],'Color','#A2142F'); % 绘制椭圆区域
%
m_gshhs('ic','color',[.5 .5 .5]) % 中等分辨率海岸线
m_gshhs('ir2','color','b') % 中等分辨率河流
m_grid('box','fancy','tickdir','in','gridlines','no','fontsize',12)
5. 结语
本篇介绍了m_map
中绘制多边形区域(m_patch
)、绘制流线图(m_streamline
)、绘制散点图(m_scatter
)、添加注释(m_annotation
)的有关函数,通过示例展示了各函数的基本用法,对于绘制常见地学图已经够用了,后面若发现还有其它相关/相似函数再进行补充。希望对绘图的你有所帮助。
😜
😜😜
😜😜😜😜