MATLAB: Update scatter plot with different colors set by the user

colormarkerfacecolorscatter

Hello,
I have a Gui that is plotting a scatter data into an axes. I want to be able to update the scatter with different colors by a depth condition (minfm, maxfm). The code is as follows:
scatter=findobj(eixo.Children,'type','Scatter');
minfm=[1000;2500];
maxfm=[2000;4000];
color={'blue';'green'};
[l,~]=size(scatter.YData);
[lin,~]=size(color);
V=repmat({'black'},1,l);
for i=1:lin
for j=1:l
if Y(j)>minfm(i) && Y(j)<maxfm(i)
V{:,j}=color{i,1};
end
end
end
set(scatter,'MarkerFaceColor',V{:});
I get the following error:
Error using matlab.graphics.chart.primitive.Scatter/set
There is no green property on the Scatter class.
The vector is ok, but I always get this error and it only plots everything in green

Best Answer

scatter=findobj(eixo.Children,'type','Scatter');
minfm=[1000;2500];
maxfm=[2000;4000];
color = [0 0 1; 0 1 0]; %{'blue';'green'};
[l,~]=size(scatter.YData);
[lin,~]=size(color);
V=repmat([0 0 0],l,1); %{'black'}
for i=1:lin
for j=1:l
if Y(j)>minfm(i) && Y(j)<maxfm(i)
V(j,:)=color(i,:);
end
end
end
set(scatter,'MarkerFaceColor',V);
It looks to me as if you should be able to condense that quite a lot.
color = [0 0 0; 0 0 1; 0 1 0];
Vidx = 1 + (Y > minfm(1) & Y < maxfm(1)) * 1 + (Y > minfm(2) & Y < maxfm(2)) * 2; %assume the ranges are mutually exclusive
V = color(Vidx(:), :);