How can I use legend for plotting dynamically sized matrix?
4 次查看(过去 30 天)
显示 更早的评论
I'm trying to plot a matrix that's returned from a function. The size of the matrix is 3xN, N is accepted with input. This is what I'm trying to get to work:
for i = 1:length(T(1,:))
plot(T(:,i));
legend([ num2str(i-1) '. Generation']);
end
but the legend is assigned only to the plot of the first column of the matrix for i's max value. Is it possible to get it to work properly? 

0 个评论
采纳的回答
Adam Danz
2019-12-18
编辑:Adam Danz
2019-12-18
Your loop is continuously overwriting the legend and only including the most recently plotted line. You actually don't need a loop at all.
T = randi(10,3,5); % fake data
plot(T)
legendStr = compose('%d Generation',(1:size(T,2))-1);
legend(legendStr)
If, for whatever reason, you prefer to produce the plot within a loop, here is the correct way to do that.
T = randi(10,3,5); % fake data
axes()
hold on
for i = 1:size(T,2)
plot(T(:,i),'DisplayName', sprintf('%d Generation',i-1));
end
legend() % no need for inputs since we used DisplayName
4 个评论
Robin Amar
2021-9-3
编辑:Robin Amar
2021-9-3
Hello Adam,
As I had similar requirement, therefore, I tried your option 1 with my code.
But, I cannot see multiple entries in the Legend display.
My Code:
phi = linspace(-4*pi, 4*pi, 30);
legendStr = compose('Angle: %s', int2str(phi));
legend(legendStr);
The output is as seen below (only one entry for all the traces):

Actually, I expected the output to be something like (independent entry for every trace):

Any Suggestions...??
Adam Danz
2021-9-3
I only see one line in your plot so there's only going to be one legend entry per line.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Legend 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!