【Matlab-M_Map】绘制海面温度分布图、等温线
本人萌新,绘制海温图时发现可以查到的代码有很多地方比较晦涩不适合新手,所以在修改的基础上进行了注释,希望对其他同学有所帮助,不足和错误之处还请指正。
文件为nc格式,时间层数一层,海温数据为三维,经纬度和层数,在绘制海表温度分布时取第一层。
clc;
clear;
source1='C:\Users\wanjy\Desktop\BOA_Argo_2020_09.nc';
ncdisp(source1);
time=ncread(source1,'time');
ticount=length(time);
lon=double(ncread(source1,'lon'));
loncount=length(lon);
lat=double(ncread(source1,'lat'));
latcount=length(lat);
temp=double(ncread(source1,'temp'));
boundary = input('输入绘图范围,格式:[起始经度 终止经度 起始纬度 终止纬度]\n');
[~,lon1]=min(abs(lon-boundary(1)));%右边指的是取所有经度与boundary(1)之差的绝对值,取其最小值,即取最近的那个点
[~,lon2]=min(abs(lon-boundary(2)));%[Y,U]=min(A):返回行向量Y和U,Y向量记录A的每列的最小值,U向量记录每列最小值的行号。
[~,lat1]=min(abs(lat-boundary(3)));%当然了,“~”指的是忽略这个值
[~,lat2]=min(abs(lat-boundary(4)));
varname = input('输入变量:','s');
disp('时间层数为:')
disp(ticount);%如果是海浪之类的有多层时间的数据,还需要在下面加入一行代码,输入需要进行展示的时间层数
for t=1:ticount
lon_scope = find(lon >= lon(lon1) & lon<=lon(lon2));%这两个经度之间的经度
lat_scope = find(lat >= lat(lat1) & lat<=lat(lat2));%这两个纬度之间的纬度
lon_number = length(lon_scope);
lat_number = length(lat_scope);
start = [lon_scope(1),lat_scope(1),1,1];%在这里是[1,1,1,1]因为这里水温数据是三维的,作海面温度时只需要第一层温度数据,所以第三位是1
count = [lon_number,lat_number,1,ticount];%数量,在这里是[3600,1600,1,1]
stride = [1,1,1,1];
SST1 = ncread(source1,varname,start,count,stride);%与上面的start,count,stride建立关系
SST_plot = imrotate(SST1(:,:,t),90);%如果不旋转的话,就是经度为行,纬度为列了,那就是3600*1600,显然不合适
SST_plot=flipud(SST_plot);%将上面的矩阵进行上下翻转
m_proj('Miller Cylindrical','lat',[lat(lat1) lat(lat2)],'lon',[lon(lon1) lon(lon2)]);%lat1,lat2为纬度边界在数组中的位置,经度同理
lat_1=linspace(lat(lat1),lat(lat2),lat_number);%linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。其中x1、x2、N分别为起始值、中止值、元素个数。
lon_1=linspace(lon(lon1),lon(lon2),lon_number);
[plon,plat]=meshgrid(lon_1,lat_1);
hold on;
set(gcf,'position',[0,0, 1600, 900]);%[距屏幕左边框距离,距屏幕下边框距离,figure宽度,figure高度]想全屏的话,就调整figure边框16:9
m_pcolor(plon,plat,SST_plot)
m_coast('patch',[0.75 0.75 0.75],'edgecolor',[0 0 0],'linewidth',1);
m_grid;
colormap jet;%设置图片的颜色图
m_contourf(lon_1,lat_1,SST_plot,'linewidth',0.5);%绘制等温线
hold on
titlename = ('2020-9 Sea Surface Temperature');
title(titlename,'fontsize',15)
h = colorbar('h');
set(get(h,'title'),'string','Temperature/℃');
hold on
saveas(gca,'C:\Users\wanjy\Desktop\1.png')%保存图片的大小是和figure窗口默认大小相关的,figure默认弹出窗口大,则保存图片就大,反之亦然
end