# How do I change the colour of certain indices in scatterplot?

17 views (last 30 days)
A Leglep on 24 Sep 2020 at 20:57
Commented: A Leglep on 25 Sep 2020 at 13:06
Hello, I am very new to this.
I am looking to make a scatter plot with some points plot as black point and some as red according to the indices.
I have a 19 elements array and for the values at indices 2, 4, 6, 9, 13, 15, 16 I want the point to be red and the other ones to be black.
Let A be my 19 elemets array
Let X be my X array
Let indice = [2 4 6 9 13 15 16]
I first wrote this:
scatter(X,A,'*k') and now how can I modify this to get the red points at the proper values?
I guess I need to do a if or for but I am not quite sure how do do this. Can anyone help me out?
Thanks

Adam Danz on 24 Sep 2020 at 21:24
Edited: Adam Danz on 24 Sep 2020 at 21:28
Here's are 4 demo that all achieve the same result.
Xvals = [1,2,3,4,5,6,7,8,9];
Yvals = [2,5,5,5,2,2,5,5,5];
% Show scatter plot were all y-val greater than 3 are red
% and all y-vals less than or equal to 3 are black.
% METHOD 1
cla()
col = [0 0 0; 1 0 0]; % [black; red]
isGreater = Yvals > 3;
scatter(Xvals, Yvals, 50, col(isGreater+1,:), 'filled')
% METHOD 2 (variation of method 1)
cla()
baseColors = [0 0 0; 1 0 0]; % [black; red]
isGreater = Yvals > 3;
cmap = baseColors(isGreater+1,:);
scatter(Xvals, Yvals, 50, cmap, 'filled')
% METHOD 3
ax = cla();
isGreater = Yvals > 3;
scatter(Xvals, Yvals, 50, isGreater+1, 'filled')
ax.Colormap = [0 0 0; 1 0 0]; % [black; red]
% METHOD 4
cla()
hold on
isGreater = Yvals > 3;
scatter(Xvals(~isGreater), Yvals(~isGreater), 50, 'k', 'filled')
scatter(Xvals(isGreater), Yvals(isGreater), 50, 'r', 'filled')

A Leglep on 25 Sep 2020 at 2:24
Oh I see! I didn't realised it was suboptimal!
I tried your first option and I don't know why is only shows the red markers...
But the second option works so I just changed my code for this one!
Thanks again
Adam Danz on 25 Sep 2020 at 2:30
"I didn't realised it was suboptimal"
Yes, logial indexing is faster and maintains the size of the array which is usually helpful.
"I tried your first option and I don't know why is only shows the red markers."
DId you change the threshold? My threshold is at 3 and all of your data are well above 3 so they would all be red if you didn't change the threshold.
"But the second option works so I just changed my code for this one!"
A Leglep on 25 Sep 2020 at 13:06
Maybe my last answer wasn't clear but I was refering to the two alternative solutions you proposed to me.
Alternative 1:
plot(A(~indice),Value(~indice),'*k');
plot(A(indice),Value(indice),'*r');
==>This one did not work for me and only plot the red markers... not sure why...
Alternative 2:
otherIndices = setdiff(1:numel(A), indices);
plot(A(otherIndices),Value(otherIndices),'*k');
plot(A(indice),Value(indice),'*r');
==>This one worked and I change my code for this!
Anyway, thanks again!

### Community Treasure Hunt

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

Start Hunting!

Translated by