How to make section distance of temperature

2 Ansichten (letzte 30 Tage)
Anom Sulardi
Anom Sulardi am 27 Nov. 2019
Kommentiert: Anom Sulardi am 27 Nov. 2019
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 :

Akzeptierte Antwort

jonas
jonas am 27 Nov. 2019
Bearbeitet: jonas am 27 Nov. 2019
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 Kommentar
Anom Sulardi
Anom Sulardi am 27 Nov. 2019
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!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by