10 - matlab m_map地学绘图工具基础函数 - 绘制多边形区域、流线图、散点图和添加注释的有关函数

10 - matlab m_map地学绘图工具基础函数 - 绘制多边形区域、流线图、散点图和添加注释的有关函数


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为可选参数用于设置填充区域的样式、边界等属性,如 EdgeColorFaceAlphaLineStyle等。

  下面是一个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)
  • lonlat 是流场数据的经度纬度坐标网格;
  • uv 是经度和纬度方向上的流场速度分量网格;
  • 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)的有关函数,通过示例展示了各函数的本用,对于绘制常见地学图已经够用了,后面若发现还有其它相关/相似函数再进行补充希望对绘图的你有所帮助






😜
😜😜
😜😜😜😜

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 19:58:06       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 19:58:06       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 19:58:06       45 阅读
  4. Python语言-面向对象

    2024-07-10 19:58:06       55 阅读

热门阅读

  1. Postgres 与 MapLibre 实时位置共享

    2024-07-10 19:58:06       15 阅读
  2. NestJs实现各种请求与参数解析

    2024-07-10 19:58:06       22 阅读
  3. AHK的对象和类学习心得

    2024-07-10 19:58:06       16 阅读
  4. Spring中常见知识点及使用

    2024-07-10 19:58:06       23 阅读
  5. Uniapp的简要开发流程指南

    2024-07-10 19:58:06       19 阅读
  6. LeetCode //C - 204. Count Primes

    2024-07-10 19:58:06       19 阅读
  7. 【debug】keras使用基础问题

    2024-07-10 19:58:06       16 阅读
  8. Qt 绘图详解

    2024-07-10 19:58:06       21 阅读
  9. MySQL篇七:复合查询

    2024-07-10 19:58:06       23 阅读
  10. [GDOUCTF 2023]Tea writeup

    2024-07-10 19:58:06       24 阅读