MATLAB: How to Fit Points on a Previous Plot

for loopif statementinterpolationnested for loopplotplottingwhile loop

I have a 401×2 double that plots the bythmetry of a beach.
I have 9 depth positions of sensors on the bottom with data provided in a 1×9 double.
I want to plot the sensors on the bythmetry plot. The depth of sensors don't directly match up with the value of depths given in the 401×2 double.
%(pro=bythymetry 401x2) (zp=depth of sensors 9x1)
plot(pro(:,1),pro(:,2)) %(distance,depth) ,depth decreases as you go below sea level (-#)
for i = length(zp)
for j = length(pro(:,2))
if pro(j,2) > zp(i) && pro(j+1,2) < zp(i) %find estimated distance where the depth occurs
hold on
plot(pro(j,1),zp(i))
end
end
end
I could use some help. Anyway I try to write a nested for loop with a conditional statement, I don't get any values! Advice on interpolating and plotting would be helpful
plot(pro(:,1),pro(:,2))
this gives
EDIT: I ATTACHED THE DATA AND A FILE TO HELP YOU UNDERSTAND THE DATA (Try it for yourselves might be fun – theres a sand bar)

Best Answer

If I understand what you're after from the code that doesn't quite work--
plot(pro(:,1),pro(:,2))
hold on
iz=arrayfun(@(z)find(z>=pro(:,2),1),zp);
plot(pro(iz,1),zp,'r*-')
legend('Full data set','Nearest @ ZP')
yields
ADDENDUM:
Another "trick" for such problems is to use interp1 backwards -- that is, use the ordinal position of the elements in the array as th y output instead of the more usual "t'other way 'round"
>> interp1(pro(:,2),1:size(pro,1),zp,'nearest')
Error using griddedInterpolant
The grid vectors must contain unique points.
Error in interp1 (line 151)
F = griddedInterpolant(X,V,method);
>>
This isn't an uncommon event with data; interp1 requires that the interpolant be unique; can handle in various ways; either add just a little random noise that is small in size compared to the data to "fuzzy it up" or just pick the unique ones. We'll use the latter method here--
[~,ia]=unique(pro(:,2));
iz=interp1(pro(ia,2),1:size(ia),zp,'nearest')+(size(pro,1)-numel(ia));
hL=plot(pro(iz,1),zp,'g*');
xlim([120 250])
will show almost the identical locations; one off in a couple places where the nearest zp value is the second in the range instead of the first.