Creating a Tabular Legend
36 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ted Baker
am 22 Apr. 2020
Bearbeitet: Michael
am 27 Nov. 2025 um 14:01
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.
0 Kommentare
Akzeptierte Antwort
Sindar
am 22 Apr. 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 Kommentare
Sindar
am 22 Apr. 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
Weitere Antworten (2)
Ameer Hamza
am 22 Apr. 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;

0 Kommentare
Michael
am 27 Nov. 2025 um 12:40
Bearbeitet: Michael
am 27 Nov. 2025 um 14:01
@Ameer Hamza Thanks for providing the code snippet and the solution — it's great. Unfortunately, it doesn’t solve my problem because I lose the handles to the plot objects.
I need a solution for two Y-axes using yyaxis left/right, so I’d like to share my workaround as well.
(I’ve removed unnecessary formatting.)
I’m using MATLAB R2025b, while the compiler at the forum is using MATLAB R2025a.
fig1 = figure(1);
ax1 = axes(fig1);
% Left axis time values
yyaxis left
% Plot
p1 = plot(ax1,rand(1,10), 'LineWidth', 2,'LineStyle',':');
hold on
p2 = plot(ax1,rand(1,10), 'LineWidth', 2,'LineStyle',':');
% Plot propperties
ylabel(ax1,'Lable 1')
yyaxis right
p3 = plot(ax1,rand(1,10), 'LineWidth', 2,'LineStyle','--');
hold on
p4 = plot(ax1,rand(1,10), 'LineWidth', 2,'LineStyle','--');
xlabel(ax1,'X-Label')
ylabel(ax1,'Lable 2')
title(ax1,'My Title}')
plotHandle = [p1,p2,p3,p4];
labels = {'Left_1','Left_2','Right_1','Right_2'};
leg = legend(ax1,plotHandle,labels,'NumColumns',2);
titles = {'left Y-axis', 'right Y-axis'};
titles = sprintf('%25s%25s', titles{:});
leg.Title.String = titles;
0 Kommentare
Siehe auch
Kategorien
Mehr zu Title finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
