Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Simplest way to add a legend to the groups of a scatter plot

Asked by the cyclist

the cyclist (view profile)

on 4 Feb 2013
Latest activity Commented on by Anton

Anton (view profile)

on 9 Apr 2014
Accepted Answer by bym

bym (view profile)

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?

0 Comments

the cyclist

the cyclist (view profile)

Products

2 Answers

Answer by bym

bym (view profile)

on 5 Feb 2013
Edited by bym

bym (view profile)

on 5 Feb 2013
Accepted answer
gscatter(M(:),sort(M(:)),C)

1 Comment

the cyclist

the cyclist (view profile)

on 5 Feb 2013

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

bym

bym (view profile)

Answer by ChristianW

ChristianW (view profile)

on 5 Feb 2013

Without gscatter fcn:

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

1 Comment

Anton

Anton (view profile)

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');
ChristianW

ChristianW (view profile)

Contact us