简单易学,教你如何用m_map绘制好看的SSS与SSH动图
前景提要:这次的专栏分享将给大家带来如何使用matlab的m_map绘制出好看的SSH与SSS图片。本文仍旧建议PC端阅读(这原本是我的一个作业,费了不少心思,结果交作业的时候发现时间分辨率不对,不符合作业要求,血压直线飙升。)

成果展示:

(gif图上传太慢了,SSS就算了)
准备工作:装有m_map的matlab

数据选取:NCEP Global Ocean Data Assimilation System (GODAS)的2011-2021年SSS与SSH的月平均数据,(小声bb,挖个坑,什么时候介绍一下这个,个人感觉挺好用的)


代码展示:以SSS为例
代码一:生成gif的每一帧
clc;clear;clf
boundary = [115 250 0 65];
num=1;
for year=2011:2021
source=['salt.' num2str(year) '.nc'];
info = ncinfo(source);
data=info.Variables;
lat=ncread(source,'lat');
lon=ncread(source,'lon');
%查找绘制范围对应的所在矩阵的位置
lon_scope = find(lon >= boundary(1) & lon<=boundary(2));
lat_scope = find(lat >= boundary(3) & lat<=boundary(4));
%绘制范围的纬度
Dlon=lon(lon_scope);
Dlat=lat(lat_scope);
salinity = ncread(source,'salt');
for t=1:12
salinity_plot=salinity(lon_scope(1):lon_scope(end),lat_scope(1):lat_scope(end),1,t)';
location=salinity_plot<0;
salinity_plot(location)=nan;
clear location
%兰伯特投影,因为我绘制的是北太平洋,有高纬度地区。大家可以根据实际情况改
m_proj('lambert','lat',[boundary(3) boundary(4)],'lon',[boundary(1) boundary(2)]);
hold on
%绘制图形
m_pcolor(Dlon,Dlat,salinity_plot) %添加我们要画的内容
m_coast('color',[0 0 0],'linewidth',2); %绘制海岸线,填充陆地
shading interp
m_grid('box','fancy') %添加边框
hold on
%添加标题
title(['2011-2021 Mouthly Sea Surface Salinity_' num2str(year) '_' num2str(t)],'fontsize',15,Interpreter='none')
%添加色标
h = colorbar('h');
caxis([0.031 0.036])
set(get(h,'title'),'string','kg');
saveas(gcf,[num2str(num) '.tif']);
num=num+1;
%保存为tif图片
clear salinity_plot
end
end
代码二:生成gif
clc ; clear ;close all;
filename = 'SSS';
for t = 1:132%这里应该到上文代码生成的文件数量
str = strcat(num2str(t),'.tif');
K = imread(str);
[A,map] = rgb2ind(K,256);
if t == 1
imwrite(A,map,filename,'gif','LoopCount',inf,'DelayTime',0.1);
else
imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.1);
end
end

写在最后:有一说一,我的这段代码是我自身去学习其他人的代码然后根据自己的数据进行修改改进然后绘制而成的,但也因此不可避免地存在一些其他人代码的影子。如果您感觉我抄袭了您的代码,请及时联系我,我会第一时间进行修改,甚至删除这篇文章。