Asked by the cyclist
on 4 Feb 2013

Here is a trivial scatter plot that uses the default marker size (S=[]) and a vector C to assign three colors according to the current colormap.

M = magic(3); S = []; C = [1;1;1;2;2;2;3;3;3]; figure scatter(M(:),sort(M(:)),S,C,'filled')

Is there a simple way to create a legend to the three colors?

Answer by bym
on 5 Feb 2013

Edited by bym
on 5 Feb 2013

Accepted answer

gscatter(M(:),sort(M(:)),C)

the cyclist
on 5 Feb 2013

Yet another MATLAB function that I knew and then forgot. Thanks for the reminder!

Answer by ChristianW
on 5 Feb 2013

Without gscatter fcn:

[~, I] = unique(C); p = findobj(gca,'Type','Patch'); legend(p(I),'X','Y','Z')

Anton
on 9 Apr 2014

I'd like to add a correction to this solution, since it doesn't work properly in my case (8.2.0.701 (R2013b)). The problem appears, when the number of elements corresponding to different colors is not the same, for instance:

C = [1;1;1;1;2;3;3;3;3];

As far as I understand, order of handles provided by findobj is **inverted**: point corresponding to the **first** element of M has the **last** position in the array p.

I suggest the following solution:

[~, I] = unique(C); % I = length(C) - I(length(I):-1:1); p = findobj(gca,'Type','Patch'); legend(p(I),'X','Y','Z');

Opportunities for recent engineering grads.

## 0 Comments