
Simplest way to add a legend to the groups of a scatter plot
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
the cyclist
el 4 de Feb. de 2013
Comentada: Anton
el 9 de Abr. de 2014
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 comentarios
Respuesta aceptada
Más respuestas (1)
ChristianW
el 5 de Feb. de 2013
Without gscatter fcn:
[~, I] = unique(C);
p = findobj(gca,'Type','Patch');
legend(p(I),'X','Y','Z')
1 comentario
Anton
el 9 de Abr. de 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');
Ver también
Categorías
Más información sobre Legend en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!