自学内容网 自学内容网

12 - matlab m_map地学绘图工具基础函数 - 在地图上绘制矢量场m_vec函数和绘制风羽图的m_windbarb函数

12 - matlab m_map地学绘图工具基础函数 - 在地图上绘制矢量场函数m_vec和绘制风羽图的函数m_windbarb


0. 引言

   本篇介绍下m_map绘制矢量场的函数(m_vec)和地图上绘制风羽图的函数m_windbarb

1. 关于m_vec

  m_vec 函数用于在地图上绘制矢量场(或者称为箭头场)。它可以用来在地图上可视化矢量数据,比如风场、流速场等

  m_vec函数的一般形式为:

[hp, ht] = m_vec(s, lon, lat, varargin)

  其中:s为比例因子,可以用于控制箭头的大小; lon, lat是矢量场的经/维度坐标,可以是标量或矩阵形式;varargin为可选参数,主要包括 [u,v],经度和纬度方向上的矢量分量,分别表示矢量场的水平和垂直分量也是绘制箭头的主要数据;此之外还有一些可选参数控制绘图样式,主要内容如下:

  • 'headangle',60 箭头尖角角度
  • 'headwidth',NaN points: direct specification of width, instead of headangle
  • 'headlength',5 将头长度,设置为0,表示忽略箭头;
  • 'headstyle',1 箭头类型,一共有四种 [1 2 3 4] 可选;
  • 'shaftwidth',1 箭轴宽度
  • 'centered', 'no' 控制输入的lon、lat是否为箭头的中心,如果为‘tail’,表示箭头指向lon、lat位置;
  • 'key' “string”, 控制在箭头位置添加标签
  • 'edgeclip', 'off' 如果为‘on’,表示在轴上的箭头可以被切;
  • 'curvature', 0 显示弯曲的箭头的时候,控制箭头的曲率(弯曲程度)

m_vec函数的绘图示例,示例数据可以从网盘获取,提取码:x2y7

clc;clear

iday=156;   % the day to show
lat=ncread('uwnd.10m.gauss.2017.nc','lat');
lon=ncread('uwnd.10m.gauss.2017.nc','lon');
[LN,LT]=meshgrid(lon,lat);
u=ncread('uwnd.10m.gauss.2017.nc','uwnd',[1,1,iday],[192,94,1]);
v=ncread('vwnd.10m.gauss.2017.nc','vwnd',[1,1,iday],[192,94,1]);

figure(2)
m_proj('miller','lon',[0 360],'lat',[-90 90]);

% 绘制流线
m_vec(30,LN,LT, u', v');  %---------------------------------------------------------------------

% 添加其他地图元素(如海岸线、边界等)
m_coast('line', 'color', 'k');
m_grid('linestyle', 'none', 'box', 'fancy');

2. 关于m_windbarb

  m_windbarb函数用于在地图上绘制风羽图(Wind Barb),用以表示风的方向和速度。风羽图常用于气象学和海洋学中,提供了一种直观的方式来展示风的强度和方向。

  m_windbarb函数的基本语法如下:

h=m_windbarb(long,lat,u,v,varargin)

  其中,lon 和 lat 是风羽图的位置,即风的观测点的经度和纬度;u 和 v 是风速分量,即风的水平速度分量和垂直速度分量。通常情况下,这两个分量应该是相对于地面的风速,分别以米/秒为单位;varargin 包含可选参数,用于指定风羽图的样式、颜色等信息。

示例1m_windbarb函数的简单示例,使用模拟数据u和v绘制的风羽图:

clc;clear;
figure
m_proj('mercator', 'lon', [69.5 105.5], 'lat', [24.5 40.5]);

lon = 69.5:1:105.5;
lat = 24.5:1:40.5;
[lon_grid, lat_grid] = meshgrid(lon, lat);

% 生成一些模拟的流场数据,例如风场
u = cosd(lat_grid) .* cosd(lon_grid);
v = sind(lon_grid);

% 绘制风羽图
m_windbarb(lon_grid, lat_grid, u, v,'color','r','linewi',2);

m_gshhs('ic','color',[.5 .5 .5]) % 中等分辨率海岸线
m_gshhs('ir2','color','b')   % 中等分辨率河流
m_grid('box','fancy','tickdir','in','gridlines','no','fontsize',12)

示例2 : 使用真实数据绘制风羽图,示例数据可以从网盘获取,提取码:x2y7

clc;clear
iday=156;   % the day to show

% use ncdisp(filename) to discover file contents...

lat=ncread('uwnd.10m.gauss.2017.nc','lat');
lon=ncread('uwnd.10m.gauss.2017.nc','lon');
[LN,LT]=meshgrid(lon,lat);

mtime=ncread('uwnd.10m.gauss.2017.nc','time')/24+datenum(1800,1,1,0,0,0);
u=ncread('uwnd.10m.gauss.2017.nc','uwnd',[1,1,iday],[192,94,1]);
v=ncread('vwnd.10m.gauss.2017.nc','vwnd',[1,1,iday],[192,94,1]);
prate=ncread('prate.sfc.gauss.2017.nc','prate',[1,1,iday],[192,94,1]);

m_proj('miller','lon',[100 260],'lat',[0 65]);
m_coast('patch',[.8 .8 .8]);
hold on 
[CS,CH]=m_contourf(LN,LT,prate'*1e3,[0.05:.05:.7],'edgecolor','none');
m_windbarb(LN,LT,u' ,v',2,'units','m/s','linewi',1,'color','r');
hold off;
m_grid('box','fancy','tickdir','out');

ax=m_contfbar([.3 .7],.05,CS,CH);
set(ax,'fontsize',12)
xlabel(ax,'Mean Daily Precipitation Rate/(kg/m^2/s)');

title(['North Pacific Surface Winds : ' datestr(mtime(iday))],'fontsize',16);

colormap(flipud(m_colmap('Blues')))

3. 总结

   本篇介绍了m_map中绘制风羽图(m_windbarb)和绘制矢量(m_vec)场的两个函数,通过示例展示了各函数的基本用法,对于绘制常见地学图已经够用了,后面若发现还有其它相关函数再进行补充希望对绘图的你有所帮助






😜
😜😜
😜😜😜😜


原文地址:https://blog.csdn.net/weixin_43339605/article/details/140247053

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!