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

61 次查看(过去 30 天)
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 个)

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