How to make section distance of temperature

4 次查看(过去 30 天)
I would like to make section distance from depth, section distance, and temperature data with bottom topography shown (as the picture shown). Here is my excel data, and I have tried to programing on syntax as follow. But it's not working especially for the boundary loop. Is there any idea for this? I utilize Matlab 2019a
clc
clear
data=xlsread('ctd_data.xlsx');
x=data(:,5); %first colum in excel file, as distance
y=data(:,3)*-1;%second colum in excel file, as depth
c=data(:,4); %c is the concentration of Temperature
figure(1)
scatter(x,y,30,c,'filled')
colorbar
axis tight; hold on
shading interp
ylabel('Depth (m)');
title('Temperature distribution');
figure(2)
[xg,yg] = meshgrid(min(x):0.1:max(x),min(y):0.1:max(y)); %make a grid to contain x,y
f = scatteredInterpolant(x,y,c,'linear'); %assign c values to x y
vg = f(xg,yg);% assign c values to finer pixel xg yg
for i=1:(length(x)-1)% 1 to end of the distance
if x(i+1)~=x(i)
j=i+1;
bx(j)=x(i);
by(j)=y(i);
end
end
bx(j+1)=x(length(x));
by(j+1)=y(length(y));
bx(j+2)=x(length(x));
by(j+2)=0;
b=boundary(x,y,1);
inmask = inpolygon(xg(:),yg(:), bx , by );%define which pixel exist in the polygon
vg(~inmask) = nan; %NAN values for the pixel not in the polygon
h = pcolor(xg,yg,vg); %ploting in 2D of vg by color
h.EdgeColor = 'none'; %to get rid off the edge line
h.FaceColor = 'interp';
colorbar
xlabel('Distance (km)');
ylabel('Depth (m)');
Desired picture :
result syntax :

采纳的回答

jonas
jonas 2019-11-27
编辑:jonas 2019-11-27
Simply skipping the loop and changing the line
inmask = inpolygon(xg(:),yg(:), bx , by );%define which pixel exist in the polygon
to
inmask = inpolygon(xg(:),yg(:), x(b) , y(b) );%define which pixel exist in the polygon
Gives more or less the desired result. The boundary() function does not seem to capture all the corners though.
Here is a better method which works because you are working with grouped data, i.e. several measurements on the exact same depth.
data=xlsread('ctd_data.xlsx');
x=data(:,5); %first colum in excel file, as distance
y=data(:,3)*-1;%second colum in excel file, as depth
c=data(:,4); %c is the concentration of Temperature
figure(1)
scatter(x,y,30,c,'filled')
colorbar
axis tight; hold on
shading interp
ylabel('Depth (m)');
title('Temperature distribution');
figure(2)
[xg,yg] = meshgrid(min(x):0.1:max(x),min(y):0.1:max(y)); %make a grid to contain x,y
f = scatteredInterpolant(x,y,c,'linear'); %assign c values to x y
vg = f(xg,yg);% assign c values to finer pixel xg yg
%find boundary
[g,xd] = findgroups(x)
yd_top = splitapply(@min,y,g)
yd_bot = splitapply(@max,y,g)
yd = [yd_top;flip(yd_bot)];
xd = [xd;flip(xd)]
inmask = inpolygon(xg(:),yg(:), xd , yd );%define which pixel exist in the polygon
vg(~inmask) = nan; %NAN values for the pixel not in the polygon
h = pcolor(xg,yg,vg); %ploting in 2D of vg by color
h.EdgeColor = 'none'; %to get rid off the edge line
h.FaceColor = 'interp';
colorbar
xlabel('Distance (km)');
ylabel('Depth (m)');
untitled.bmp
cheers!
  1 个评论
Anom Sulardi
Anom Sulardi 2019-11-27
Thank you in advance for your great work, it's really working well. I would like to appreciate on your time and work. Have a nice day!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by