How to plot the mean value of X corresponding to each Y value?
9 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Alejandra Uguet de Resayre
le 11 Jan 2023
Commenté : Star Strider
le 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:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1259610/image.png)
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 commentaires
Star Strider
le 11 Jan 2023
@Alejandra Uguet de Resayre — Please see my latest Comment to my Answer. It produces the result matching the plot you posted.
Réponse acceptée
Star Strider
le 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 commentaires
Plus de réponses (1)
Mathieu NOE
le 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 :
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1260085/image.png)
with decimation factor 50
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1260090/image.png)
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 commentaires
Voir également
Catégories
En savoir plus sur Line Plots dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!