How to plot the mean value of X corresponding to each Y value?

1 view (last 30 days)
I want to plot a vertical profile of temperature (so Y-axis is depth (m) and X-axis is temperature (ºC)). Because I have many measurements for each depth, what I get is a profile made of a cloud of points:
However, I would like to get a linear profile, so I guess I would need to plot each X mean value for each Y, right?
Could someone please help me on that?
Thanks a lot!
Star Strider
Star Strider on 11 Jan 2023
@Alejandra Uguet de Resayre — Please see my latest Comment to my Answer. It produces the result matching the plot you posted.

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 11 Jan 2023
I am not certain what you want.
Perhaps something like this —
x = ones(9,1)*linspace(13, 19, 50); % Create Data
y = 8E+2*(1-exp(-5*(x-13)))-1E+3 + randn(9,size(x,2))*75; % Create Data
T = x(:); % Temperature (Assume Column Vector)
D = y(:); % Depth (Assume Column Vector)
NBins = 14; % Change This To Change Temperature Resolution
[N,Edges,Dpthv] = histcounts(D, NBins);
Ctrs = Edges(1:end-1) + mean(diff(Edges)); % Depth Centers
% Tvct = linspace(min(T), max(T), NBins);
TempMean = accumarray(Dpthv, T, [], @mean) % Calculate Mean Temperature At Each Depth
TempMean = 14×1
13.0000 13.0000 13.0000 13.0000 13.1224 13.1224 13.1224 13.1837 13.6234 15.5923
plot(T, D, '.r', 'DisplayName','Data')
hold on
plot(TempMean, Ctrs, '.-b', 'DisplayName','Mean Temperature')
hold off
xlabel('Temperature (°C)')
ylabel ('Depth (m)')
The blue line plots depth as a function of the mean temperature.

Sign in to comment.

More Answers (1)

Mathieu NOE
Mathieu NOE on 11 Jan 2023
yes i'm coming late in the show... nevertheles I am here !!
just for the fun and FYI
your data could be decimated up to factor 100 without loss of quality I think
without decimation :
with decimation factor 50
temp = candec18tCopy.theta;
depth = -candec18tCopy.dep;
% remove nan's
idx = isnan(temp);
temp(idx) = [];
depth(idx) = [];
% sort
[temp,id] = sort(temp,'ascend');
depth = depth(id);
% unique
[temp,IA,IC] = unique(temp);
depth = depth(IA);
% decimation
decim_fact = 50; % test with 1 to 100
ind = 1:decim_fact:numel(depth);
temp = temp(ind);
depth = depth(ind);
% remove data below 13.25
ind = (temp<13.25);
temp(ind) = [];
depth(ind) = [];
depth_s = smoothdata(depth,'movmedian',round(10000/decim_fact));


Find more on Shifting and Sorting Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!