Multiple legends on Axes in App Designer?

28 Ansichten (letzte 30 Tage)
yvesvincent abgrall
yvesvincent abgrall am 12 Sep. 2019
Kommentiert: Adam Danz am 19 Apr. 2021
Hello,
I'm facing a problem on App Designer , I can't display 2 different legends on the axes.
I have no error message so far, the thing is, only the legend for the second declared plot (displays a maximum; l2 and h2legend) is diplqyed
Here is my code:
hold(app.UIAxes, 'on')
l1=plot(app.UIAxes,c,a); % c and a are vectors containing points coordinates
l2=plot(app.UIAxes,c,app.mx{1,2:end},'--','LineWidth', 3,'DisplayName','Maximum'); %app.m is a table in xhich I'd like to store different lines (one line for each parameter)
hold(app.UIAxes, 'off')
n=numel(app.BaseframeListBox.ItemsData);
vec=1:n;
app.UIAxes.XTick = vec; %vec is an array of integers used to place xticks
app.UIAxes.XTickLabel = app.xtik; %app.xtick is a vector of strings
h1legend=legend(app.UIAxes,app.show.Engine_Ref{:},'Location', 'southoutside','Orientation','horizontal');
hold (app.UIAxes, "on")
h2legend=legend(app.UIAxes,l2,'Max'); %,'Location', 'southoutside','Orientation','horizontal');
% h3legend=legend(app.UIAxes,[h1legend,h2legend]); % an unsuccessful test
hold (app.UIAxes, "off")
h3legend.NumColumns=3;
Could you help me please to diplay 2 different legend box?
Thanking you in advance for your help!
  1 Kommentar
Adam Danz
Adam Danz am 19 Apr. 2021
julien attiogbe's answer moved here as a comment
Hello YvesVincent,
I am just curious to know if you have found a solution to your problem? I could use this double legend.
Thanks !
Florin Postolache's answer moved here as a comment
I am also interested about double legends! Thanks.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Adam Danz
Adam Danz am 19 Apr. 2021
Bearbeitet: Adam Danz am 19 Apr. 2021
Only one legend can be associated with a pair of axes. When a second legend is assigned to axes, it replaces the first one.
Instead of trying to add a second legend, consider using multiple columns within a single legend (see NumColumns legend property). This is the cleaner, easier approach.
If you really want a second legend to appear you can create a second pair of invisible axes containing invisible objects that should appear in a second legend and then position the legend within the figure. Solution 2 of this answer provides a demo.
Here's another quick demo that should get you started. It stacks legend #2 under legend #1. Legend #2 follows legend #1 if the figure is resized or the axis position changes.
% Plot stuff on the main axes (app.UIAxes)
app.UIFigure = uifigure();
app.UIAxes = uiaxes(app.UIFigure);
hold(app.UIAxes, 'on')
h1 = plot(app.UIAxes, magic(5), '-o');
h2 = plot(app.UIAxes, 1:5,rand(5,5)*25,'*');
% Duplicate the axes, clear the new axes
app.UIAxes2 = copyobj(app.UIAxes,app.UIFigure);
cla(app.UIAxes2)
% Add anything from axes1 to axes2 and make the
% object(s) and axes invisible.
h2Copy = copyobj(h2, app.UIAxes2);
set(h2Copy,'Visible', 'off')
app.UIAxes2.Visible = 'off';
% Create first legend and set its location
leg1 = legend(app.UIAxes,h1,{'line1','line2','line2','line4','line5'},'Location','EastOutside');
% Create second legend and position it under the first one.
leg2 = legend(app.UIAxes2,h2,{'dot1','dot2','dot2','dot4','dot5'},'Location','EastOutside');
leg2.Position(2) = leg1.Position(2)-leg2.Position(4)
% Add listener to update position of legend2 when legend1 moves
leg1.UserData = addlistener(leg1,'MarkedClean',@(~,~)set(leg2,'Position',leg1.Position-[0,leg1.Position(4),0,0]));

Jalaj Gambhir
Jalaj Gambhir am 17 Sep. 2019
Hi,
As I understand, you want to add multiple legends in App Designer. This can be easily done as in the example below:
hold(app.UIAxes,'on');
t = linspace(-10,10,1000);
sin_t = sin(t);
cos_t = cos(t);
plot(app.UIAxes,t,sin_t,'Color','blue');
plot(app.UIAxes,t,cos_t,'Color','r');
legend(app.UIAxes,{'y = sin(x)','y = cos(x)'},'Location','southoutside');
Adding multiple “legend boxes” is not supported by MATLAB
  1 Kommentar
yvesvincent abgrall
yvesvincent abgrall am 17 Okt. 2019
Thank you for your answer.
Unfortunately your code only displays 2 elements is a legend, not 2 seperate legend boxes...

Melden Sie sich an, um zu kommentieren.

Produkte


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by