169 views (last 30 days)
Show older comments
nathan blanc on 2 Jan 2021
Commented: Star Strider on 3 Feb 2023
Accepted Answer: Star Strider
I am creating a plot with two different y axes. the curves are added alternately. for example:
yyaxis left
plot(A)
yyaxis right
plot(B)
yyaxis left
plot(C)
yyaxis right
plot(D)
My problem is that when I add a legend to the plot, the order of the curves is not the order in which they were created. instead, they are ordered first by the left axis
and then by the right axis. meaning if i write down "legend(A,B,C,D)" the legend entry B will correspond with the curve C and vice-versa. is there a way to fix this? The actual case there are more than 4 curves, and the number changes every time, so manual changing is not possible. many thanks in advance
Nathan
0 Comments Show -2 older commentsHide -2 older comments
Show -2 older commentsHide -2 older comments
Sign in to comment.
Sign in to answer this question.
Accepted Answer
Star Strider on 2 Jan 2021
Edited: Star Strider on 2 Jan 2021
Open in MATLAB Online
Try this:
A = rand(1,10);
B = rand(1,15);
C = rand(1,20);
D = rand(1,30);
figure
hold on
yyaxis left
ha = plot(A);
yyaxis right
hb = plot(B);
yyaxis left
hc = plot(C);
yyaxis right
hd = plot(D);
hold off
legend([ha,hb,hc,hd], 'A','B','C','D')
Alternatively:
figure
yyaxis left
ha = plot(A);
hold on
hc = plot(C);
hold off
yyaxis right
hb = plot(B);
hold on
hd = plot(D);
hold off
legend([ha,hb,hc,hd], 'A','B','C','D')
Using hold is the only way to do what you want. This cannot be used with your posted code, because without the hold function, the second calls to yyaxis left and yyaxis right calls eliminate the handles to the previously plotted curves.
EDIT — (2 Jan 2021 at 17:41)
Added alternative code.
.
6 Comments Show 4 older commentsHide 4 older comments
Show 4 older commentsHide 4 older comments
nathan blanc on 2 Jan 2021
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/707198-legend-with-multiple-axes-using-yyaxis#comment_1240713
Thank you Star. I didn't quite understand why you kept holding on and off in your code, but the naming of the plots and addition to the legend command solved my problem
Nathan
Star Strider on 2 Jan 2021
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/707198-legend-with-multiple-axes-using-yyaxis#comment_1240768
As always, my pleasure!
The hold function permits subsequent plots on the same axes, and that is necessary here. (I thought that I already posted a link to that function, however I now realise that did not, and have now corrected that. My apologies for the oversight.)
Giovanni Bambini on 2 Feb 2023
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/707198-legend-with-multiple-axes-using-yyaxis#comment_2595371
Edited: Giovanni Bambini on 2 Feb 2023
Open in MATLAB Online
This does not seem to work when grouping bars:
A = [rand(10,1) zeros(10,1)];
B = [zeros(10,1) rand(10,1)];
figure;
yyaxis left
ha = bar(A, 'FaceColor', '#0000FF');
set(findobj(gcf,'type','axes'), 'ycolor', '#0000FF');
yyaxis right
hb = bar(B, 'FaceColor', '#00BCFF');
set(findobj(gcf,'type','axes'), 'ycolor', '#00BCFF');
legend([ha hb], 'h1', 'h2');
Warning: Ignoring extra legend entries.
Please help
E.
Voss on 2 Feb 2023
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/707198-legend-with-multiple-axes-using-yyaxis#comment_2595471
Open in MATLAB Online
ha and hb are each 2 bar objects, as shown below. Therefore, [ha hb] is four bar objects. You can use just the first element of each ha and hb for the legend, [ha(1) hb(1)]
A = [rand(10,1) zeros(10,1)];
B = [zeros(10,1) rand(10,1)];
figure;
yyaxis left
ha = bar(A, 'FaceColor', '#0000FF')
ha =
1×2 Bar array: Bar Bar
set(findobj(gcf,'type','axes'), 'ycolor', '#0000FF');
yyaxis right
hb = bar(B, 'FaceColor', '#00BCFF')
hb =
1×2 Bar array: Bar Bar
set(findobj(gcf,'type','axes'), 'ycolor', '#00BCFF');
legend([ha(1) hb(1)], 'h1', 'h2');
Giovanni Bambini on 3 Feb 2023
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/707198-legend-with-multiple-axes-using-yyaxis#comment_2596721
Thanks!!!!
Star Strider on 3 Feb 2023
Direct link to this comment
https://www.mathworks.com/matlabcentral/answers/707198-legend-with-multiple-axes-using-yyaxis#comment_2596936
My pleasure!
A Vote would be appreciated!
Sign in to comment.
More Answers (0)
Sign in to answer this question.
See Also
Categories
MATLABGraphicsFormatting and AnnotationLabels and AnnotationsLegend
Find more on Legend in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)
Contact your local office