Creating a Tabular Legend

24 vues (au cours des 30 derniers jours)
Ted Baker
Ted Baker le 22 Avr 2020
Commenté : Ted Baker le 22 Avr 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.

Réponse acceptée

Sindar
Sindar le 22 Avr 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 commentaires
Sindar
Sindar le 22 Avr 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 le 22 Avr 2020
Thanks, I managed to manually line it up by adding thin spaces as padding (U+2009).

Connectez-vous pour commenter.

Plus de réponses (1)

Ameer Hamza
Ameer Hamza le 22 Avr 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;

Catégories

En savoir plus sur Labels and Annotations dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by