6 views (last 30 days)

Show older comments

Hello, I need to reassign selected plotted points to NaN values and update my graph so that they no longer show up on the graph but I am having trouble getting my code to work. I need to compare x and y values between 2 different sized arrays. If the coordinates compared match I need those coordinates to be sent back to the original matrix as NaN values and then have the current figure updated accordingly and those points no longer showing on the graph. Below is the string of code I am working with. Any help would be greatly appreciated. X and Y are the where the orignial points are stored while HS_elim is the array that contains the points that should be eliminated.

LengthofTC4 = length(HS_elim);

for i = 1:n

for j = 1:LengthofTC4

if x(i) == HS_elim(j,1) || y(i) == HS_elim(j,2)

x(i) = NaN;

y(i) = NaN;

refreshdata(CTR)

drawnow

end

end

end

dpb
on 13 Aug 2019

dpb
on 13 Aug 2019

I presume the "~-0" clause is to not eliminate i==j? Or can there be actual identical matches elsewhere?

Either way the first loop

% Circle of influence elimination HS-HS test & isolates hormone seeds that fail condition

threshold=16; % don't bury magic numbers in code...

elim_dist2=diag(inf(n,1))+squareform(pdist([x y])); % distances between points

[HS_elim_x, HS_elim_y]=find(elim_dist2<threshold); % locations under threshold

HS_elim=[HS_elim_x, HS_elim_y];

All the other variables are the same as HS_elim, just copies of the same thing. Not sure why???

But, now you have indices, not values you have to look up again -- just set those locations:

LengthofTC4 = size(HS_elim,1); % length --> max(size()) not number rows

for j = 1:LengthofTC4

x(HS_elim_x(j)) = NaN;

y(HS_elim_y(j)) = NaN;

refreshdata(CTR);

drawnow

end

if you still want it to be on element-by-element basis -- but unless you pause() between you probably can't see the evolution anyway, so simply

x(HS_elim_x) = NaN;

y(HS_elim_y) = NaN;

does the dirty...

ADDENDUM:

The above does assume there aren't zeros elsewhere other than the diagonal...that's the point of the Inf() on the diagonal of the squareform array...if there are other locations, you can, of course, write a compound expression for the find() operation; I was just trying to do it with one by eliminating zero elements first.

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

Start Hunting!