12 - matlab m_map地學繪圖工具基礎函數 - 在地圖上繪制矢量場函數m_vec和繪制風羽圖的函數m_windbarb
- 0. 引言
- 1. 關于m_vec
- 2. 關于m_windbarb
- 3. 總結

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;cleariday=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
包含可選參數,用于指定風羽圖的樣式、顏色等信息。
示例1 :m_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)場的兩個函數,通過示例展示了各函數的基本用法,對于繪制常見地學圖已經夠用了,后面若發現還有其它相關函數再進行補充。希望對繪圖的你有所幫助
😜
😜😜
😜😜😜😜