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

조회 수: 64 (최근 30일)
the cyclist
the cyclist 2013년 2월 4일
댓글: Anton 2014년 4월 9일
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?

채택된 답변

bym
bym 2013년 2월 5일
편집: bym 2013년 2월 5일
gscatter(M(:),sort(M(:)),C)
  댓글 수: 1
the cyclist
the cyclist 2013년 2월 5일
Yet another MATLAB function that I knew and then forgot. Thanks for the reminder!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

ChristianW
ChristianW 2013년 2월 5일
Without gscatter fcn:
[~, I] = unique(C);
p = findobj(gca,'Type','Patch');
legend(p(I),'X','Y','Z')
  댓글 수: 1
Anton
Anton 2014년 4월 9일
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');

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Legend에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by