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

1 view (last 30 days)

Show older comments

Alejandra Uguet de Resayre
on 11 Jan 2023

Commented: Star Strider
on 13 Jan 2023

Hello!

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!

##### 3 Comments

Star Strider
on 11 Jan 2023

### Accepted Answer

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

figure

plot(T, D, '.r', 'DisplayName','Data')

hold on

plot(TempMean, Ctrs, '.-b', 'DisplayName','Mean Temperature')

hold off

grid

xlabel('Temperature (°C)')

ylabel ('Depth (m)')

legend('Location','best')

The blue line plots depth as a function of the mean temperature.

.

##### 9 Comments

### More Answers (1)

Mathieu NOE
on 11 Jan 2023

hello

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

code

load('matlab.mat');

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));

plot(temp,depth,'*r',temp,depth_s,'-b')

##### 2 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!