Split legend of figure into multiple columns ?
Mostrar comentarios más antiguos
Dear All,
I have one figure which have many curves. I can't show my legend inside the figure so I have to show them outside. There are two possible layouts(orientation) of legends:
- Vertical
- Horizontal
In both orientation, legend gets too big to display. It can be displayed properly if and only if I could split legend into multiple columns. Like in first column I show 10 curves name and in second column I show next 10. I could not figure it either it is possible or not?
Any suggestion will be highly appreciated.
Respuesta aceptada
Más respuestas (3)
Hi!
I was also using columnlegend which is a great tool. However, I found myself another solution that might be useful to somebody and I will give you a short example here for a two rows legend:
Let's say you define your plots as array like this
h(i) = plot(x,y,<options>);
And your legend as cell
legendInfo = {'item1','item2',...,'itemN'};
Then you can define a legend object as follows
hL1 = legend(h(1:l), legendInfo(1:l), <options>);
hL2 = legend(h(l+1:end), legendInfo(l+1:end), <options>);
where in options you might be willing to set e.g. the orientation as 'horizontal'. Then you can define a position and the units for this
newPosition1 = [a b c d];
newPosition2 = [e f g h];
newUnits = 'normalized';
where actually 'c' and 'd' are the same as 'g' and 'h'. Eventually, you can set your legend as
set(hL1, 'Position', newPosition1, 'Units', newUnits);
set(hL2, 'Position', newPosition2, 'Units', newUnits);
1 comentario
Marcus Oliveira
el 22 de Feb. de 2021
Thanks, MattF!
How could I write these lines in a single box?
Jessica
el 4 de En. de 2019
3 votos
MattF - thanks for offering this alternate solution! I'm using Matlab version 2018a, and it doesn't seem to work for me.
When I create the first legend, hL1 has type matlab.graphics.illustration.Legend. Then when I create hL2, it has the same type, and appears to simply overwrite hL1, even though both stay in my variable space.
I then tried to assign them different locations, but the last-created legend just moves around - the first legend appears to have been over-written. I'm guessing that this is a Matlab version issue, but wanted to know if I was missing something, perhaps in those <options>.
3 comentarios
Arjun Chakrawal
el 30 de En. de 2019
Editada: Arjun Chakrawal
el 30 de En. de 2019
There is a much simpler solution.
hlegend=legend('one', 'two','three','four');
hlegend.NumColumns=2
ahmad eldeeb
el 30 de En. de 2019
It doesn't work for 2017b but works for 2018b with me as :
set(legend, 'NumColumns' ,3)
Praveen Teleti
el 10 de Abr. de 2019
To avoid first legend object being overwritten, save a copy of figure object just before you create second legend object, example:
hL1 = legend(h(1:l), legendInfo(1:l), <options>);
set(hL1, 'Position', [0.7 0.4 0.1 0.4]);
a=axes('position',get(gca,'position'),'visible','off');
hL2 = legend(a,h(l+1:end), legendInfo(l+1:end), <options>);
set(hL2, 'Position', [0.78 0.4 0.1 0.4]);
This process can be repeated any number of times to create any number of legend objects. Hope it helps!
Camilo Malagon Nieto
el 14 de Ag. de 2017
0 votos
Can some one explain this commands better... because for example the columnlegend gives "Undefined function 'columnlegend' for input arguments of type 'cell'." ????
1 comentario
Jan
el 14 de Ag. de 2017
This is not a problem of the command, but you did not install in in a folder, which is contained in your Matlab path. See:
help addpath
Categorías
Más información sobre Legend en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!