Effacer les filtres
Effacer les filtres

Add variable legend to a plot without for loop

5 vues (au cours des 30 derniers jours)
Kien Pham
Kien Pham le 11 Mar 2021
Commenté : Kien Pham le 11 Mar 2021
I am plotting two 201x4 arrays, resulting in four 2-d lines. The y array is a time series so I want the legend to vary accordingly. I created a 1x4 cell with strings that show the time variation of my y variable. However, the result is not satisfactory as shown in the figure below:
My code attempt is below:
lgd = {'HGS 50-year','HGS 100-year','HGS 150-year','HGS 200-year'};
h2 = plot(x,y,'LineWidth',1.25,'DisplayName',char(lgd)');
legend;
I can easily accomplish what I need with a for loop but I do not want to do that because I think I am close to accomplishing what I need without it.
Please help. Thank you.

Réponse acceptée

Star Strider
Star Strider le 11 Mar 2021
Modifié(e) : Star Strider le 11 Mar 2021
This appears to work correctly:
x = 0:0.1:10;
y = exp(-(x-(0:4).').^2)./(1:5).';
figure
plot(x, y)
lgd = {'HGS 50-year','HGS 100-year','HGS 150-year','HGS 200-year'};
legend(lgd)
EDIT — (11 Mar 2021 at 21:34)
Added plot figure.
.
  2 commentaires
Kien Pham
Kien Pham le 11 Mar 2021
Modifié(e) : Kien Pham le 11 Mar 2021
Thank you. I have a follow-up question after getting that to work. Can you take a look at my comment to Walter Robertson above and see if you have help me a bit further?
Star Strider
Star Strider le 11 Mar 2021
Yes.
Try this:
x = 0:0.1:10;
y = exp(-(x-(0:3).').^2)./(1:4).';
ya = exp(-(x-(0:3).'+0.1).^2)./(1:4).';
figure
hv = plot(x, y);
hold on
ha = plot(x, ya, '--k');
hold off
lgd = {'HGS 50-year','HGS 100-year','HGS 150-year','HGS 200-year'};
legend([ha(1); hv],{'Analytical',lgd{:}})
producing:
.

Connectez-vous pour commenter.

Plus de réponses (1)

Walter Roberson
Walter Roberson le 11 Mar 2021
Modifié(e) : Walter Roberson le 11 Mar 2021
N = 20;
x = 1:N;
y = sort(rand(N,4));
lgd = {'HGS 50-year','HGS 100-year','HGS 150-year','HGS 200-year'};
h2 = plot(x,y,'LineWidth',1.25);
legend(h2, lgd)
  3 commentaires
Walter Roberson
Walter Roberson le 11 Mar 2021
N = 20;
x = 1:N;
y = sort(rand(N,4));
x2 = 1:N;
y2 = sort(rand(N,4));
lgd1 = {'Analytical'};
lgd2 = {'HGS 50-year','HGS 100-year','HGS 150-year','HGS 200-year'};
h1 = plot(x2,y2,'k--','LineWidth',1.25); hold on;
h2 = plot(x,y,'LineWidth',1.25);
hold off;
legend([h1(1); h2], [lgd1, lgd2]);
Kien Pham
Kien Pham le 11 Mar 2021
Very elegant and without the the use of {} at all as in the solution by Star Strider. Many thanks.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by