摘要:Matlab借助M_map绘图
注:仅记录学习,如有侵权,联系删除。
- 1、所写内容只是个人理解,如有错误,还请包涵
- 2、所用主题为slandarer提供的墨滴模板
- 3、CSDN:勉为其难免免
- 4、微信公众号:飘散在人间的一缕青丝
一、安装M_map工具箱
看视频,如果遇到错误,请先看评论区。
二、M_map示例绘图
点击Gallery,每个图都有对应的代码,可参考学习。
三、M_map基本使用
- 1、投影方式确定
- 2、海岸线
- 3、增加网格
clc
clear
close all
%% step1:确定投影方式,指定经纬度
m_proj('miller');
%% step2:海岸线的画法
m_coast;
%% step3:增加网格
m_grid;
上述代码不需要自己的数据,工具包自带了数据,为了给海洋和陆地做区分,可修改代码,对陆地上色。一般用这个画的是海图,所以m_coast的pacth是给陆地上色,而不是给海洋上色。
clc
clear
close all
%% step1:确定投影方式,指定经纬度
m_proj('miller');
%% step2:海岸线的画法
m_coast('patch',[.7,.7,.7]);%给陆地上色,一般使用灰色
%% step3:增加网格
m_grid;
修改经纬度到指定区域,而不是全球。lon和lat指定范围
clc
clear
close all
%% step1:确定投影方式,指定经纬度
m_proj('miller','lon',[110,130],'lat',[20,40]);
%% step2:海岸线的画法
m_coast('patch',[.7,.7,.7]);%给陆地上色,一般使用灰色
%% step3:增加网格
m_grid;
修改海岸线,用m_gshhs
clc
clear
close all
%% step1:确定投影方式,指定经纬度
m_proj('miller','lon',[110,130],'lat',[20,40]);
%% step2:海岸线的画法
% m_coast('patch',[.7,.7,.7]);%给陆地上色,一般使用灰色
m_gshhs_f('patch',[253, 246, 227]/255);
%% step3:增加网格
m_grid;
%% map的投影和岸线以及表示
clear;close all;clc
% miller 米勒投影 矩形 Miller Cylindrical
% Lambert 扇形投影
% m_proj('set') 这个命令可以查询所有的投影方式
%% step1:确定投影方式,指定经纬度
m_proj('miller','lon',[120.7273024829,120.7345941598],'lat',[36.3259704966,36.3339341039])% 选择投影方式 其实就是地图展现形式
%% step2:海岸线的画法 m_coast 和m_gshhs两种方式 example.mlx里面有具体的使用说明
% m_coast('patch',[.7,.7,.7]);% patch属性 给陆地进行上色 海洋目前展示是白色的 因为画的是海图,还有没各种数据,所以现在上色是没意义的
m_gshhs_f('patch',[253, 246, 227]/255);% 用m_gshhs_f画海岸线 分辨率更高,注意和m_coast同时只能用一个
% c、l、i、h、f 分别表示粗糙/低/中/高/满分辨率
%% step3:增加网格
m_grid('box','fancy');% 增加网格 m_grid get 可以查看属性
四、M_map画温度场图,等温线,风速
示例数据下载网址,ERA5数据,数据如何下载不再赘述,大家都有自己的原始数据。(注:示例数据可在公众号获取)
https://cds.climate.copernicus.eu/datasets/reanalysis-era5-single-levels?tab=download
%% 画海表温度图
clear;close all;clc
%% 读取文件
%ncdisp 查看文件内容
filename="singlelevelsfrom1979.nc";
ncdisp("singlelevelsfrom1979.nc")
nlon=double(ncread(filename,'longitude'));% 读取经度变量
nlat=double(ncread(filename,'latitude')); % 读取纬度变量
t2m=double(ncread(filename,'t2m')); % 温度
%% 数据预处理
t2m = t2m-273.15;
[mlat,mlon]=meshgrid(nlat,nlon);
%% 画图
m_proj('miller','lon',[105 118],'lat',[4 21]);%miller
m_pcolor(mlon,mlat,t2m);%用pcolor上色
m_gshhs_f('patch',[0.7,0.7,0.7]);%一般给陆地上灰色的 这个颜色可以随便改 可以先用m_coast 分辨率低一点话,能快点画图
m_grid('box','fancy')
colormap(spring)
colorbar
hold on
% m_contour(mlon,mlat,t2m,'k') % 继续画上等温线 默认的showtext是关闭的
% m_contour(mlon,mlat,t2m,'k','showtext','on') % 继续画上等温线 打开showtext
% 显示指定的温度线
% V = [26 26];% 如果只有一个温度的话,那么是26 26 写两遍
V = [26 30];% 如果想指定多个温度的话,26 30即可
m_contour(mlon,mlat,t2m,V,'k','showtext','on')
%% ==================在上述温度场继续绘制风速
u10=double(ncread(filename,'u10')); %
v10=double(ncread(filename,'v10')); %
qh = m_quiver(mlon,mlat,u10,v10,2,'color','k');% 可以返回句柄 然后设置箭头的各种属性 2代表箭头的大小
qh.Marker = "o";
qh.MarkerSize = 1;
五、图形修饰
类似于plot,contourf,colorbar,colormap都可以返回句柄,然后查询都有什么属性,就可以设置各个属性进行图形修饰了。
%% 画经纬度网格线粗细以及经纬度字号大小设置
clear;close all;clc
%% 读取文件
%ncdisp 查看文件内容
filename="singlelevelsfrom1979.nc";
ncdisp("singlelevelsfrom1979.nc")
nlon=double(ncread(filename,'longitude'));% 读取经度变量
nlat=double(ncread(filename,'latitude')); % 读取纬度变量
t2m=double(ncread(filename,'t2m')); % 温度
%% 数据预处理
t2m = t2m-273.15;
[mlat,mlon]=meshgrid(nlat,nlon);
%% 画图
m_proj('miller','lon',[105 118],'lat',[4 21]);%miller
[c,h] = m_contourf(mlon,mlat,t2m);%用pcolor上色
h.LevelList = 22:0.5:31;
h.LineStyle = 'none';
m_gshhs_f('patch',[0.7,0.7,0.7]);%一般给陆地上灰色的 这个颜色可以随便改 可以先用m_coast 分辨率低一点话,能快点画图
m_grid('fontname','timenewrom','box','fancy','fontsize',15, ...
'linestyle','none','linewidth',2)%添加网格线
colormap(spring)
h_cbar = colorbar;
% h_cbar.Ticks = [20:5:30];
六、画轨迹、增加文字标注
%% 画轨迹
clear;close all;clc
%% 读取文件
%ncdisp 查看文件内容
filename="singlelevelsfrom1979.nc";
ncdisp("singlelevelsfrom1979.nc")
nlon=double(ncread(filename,'longitude'));% 读取经度变量
nlat=double(ncread(filename,'latitude')); % 读取纬度变量
t2m=double(ncread(filename,'t2m')); % 温度
%% 数据预处理
t2m = t2m-273.15;
[mlat,mlon]=meshgrid(nlat,nlon);
%% 画图
m_proj('miller','lon',[105 118],'lat',[4 21]);%miller
[c,h] = m_contourf(mlon,mlat,t2m);%用pcolor上色
h.LevelList = 22:0.5:31;
h.LineStyle = 'none';
m_gshhs_f('patch',[0.7,0.7,0.7]);%一般给陆地上灰色的 这个颜色可以随便改 可以先用m_coast 分辨率低一点话,能快点画图
m_grid('fontname','timenewrom','box','fancy','fontsize',15, ...
'linestyle','none','linewidth',2)%添加网格线
colormap(spring)
h_cbar = colorbar;
% h_cbar.Ticks = [20:5:30];
%% 画轨迹线
lon2 = [110,111,112,113];
lat2 = [17,18,19,20];
m_line(lon2,lat2,'marker','o','markersize',5,....
'color',[16, 124, 65]/255,'linewidth',2,'MarkerEdgeColor','k','MarkerFaceColor','r')
m_text(lon2(1),lat2(1),' 勉为其难免免')
七、不同的colormap
使用方法,输入名字;或者输入名字,个数
colormap(othercolor(‘BuDRd_12’))
colormap(othercolor(‘BuDRd_12’,18))
slandarer公众号
othercolor的一些颜色案例
八、下载链接
公众号:飘散在人间的一缕青丝
后台回复:map案例