Borrar filtros
Borrar filtros

Creating a Tabular Legend

64 visualizaciones (últimos 30 días)
Ted Baker
Ted Baker el 22 de Abr. de 2020
Comentada: Ted Baker el 22 de Abr. de 2020
I would like to create a legend with an additional column for a number to be inserted next to the variable name as follows:
However, I'm unsure as to how I can achieve this layout - I have tried searching for a function like gridlegend, but I cannot get it to work in this format. Any ideas as to how I can get this implemented? Thanks in advance.

Respuesta aceptada

Sindar
Sindar el 22 de Abr. de 2020
Not a good solution, but with some fiddling gets pretty close:
myleg=compose('%-8s%10d',["Boot";"Engine";"Wheel"],[1 3 5]');
myl=legend(myleg)
title(myl,sprintf('%9s %-12s%s','Line','Location','Number'))
  3 comentarios
Sindar
Sindar el 22 de Abr. de 2020
I saw that and couldn't figure out why it's happening. You can tweak the formatspec in the compose and sprintf.
'%-8s%10d'
says left-justify a string, padding the length to at least 8. Then, (right-justify) a number padding to length at least 10
'%9s %-12s%s'
says (right-justify) a string, pad to 9; three spaces; left-justify a string, pad to 12; (right-justify) a string, don't pad
Ted Baker
Ted Baker el 22 de Abr. de 2020
Thanks, I managed to manually line it up by adding thin spaces as padding (U+2009).

Iniciar sesión para comentar.

Más respuestas (1)

Ameer Hamza
Ameer Hamza el 22 de Abr. de 2020
Try this
ax = axes();
hold(ax);
plot(rand(1,10), 'LineWidth', 2);
plot(rand(1,10), 'LineWidth', 2);
plot(rand(1,10), 'LineWidth', 2);
labels1 = {'boot', 'engine', 'wheel'};
labels2 = {'1', '3', '5'};
labels = cellfun(@(x,y) {sprintf('%10s%9s', x, y)}, labels1, labels2);
l = legend(labels, ...
'FontName', 'FixedWidth');
titles = {'Line', 'Location', 'Number'};
titles = sprintf('%4s%14s%10s', titles{:});
l.Title.String = titles;

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by