Matlab 动态图例/图例 "hold on" 样行为

Matlab dynamic legend / legend "hold on" like behavior

只想添加更多数据做一个图例而不擦除它。像个传说"hold on"

示例:

plotData = 绘图数据数组,如 plotData(i) = plot(...

N = plotData 的大小。

代码:

for i = 1:N
   str =  sprintf('My plot y %d', i);
   %legendData(:,i) = [plotData; str]; %#ok<SAGROW>
   %[~,~,~,current_entries] = legend;
   %legend([current_entries [plotData; str]]); no sucess here

   % This command will erase the previous one. 
   legend(plotData,str);
end

legend([plotX1,plotX2],'x 1','x 2');

我想我可以存储循环中的图例信息并将其添加到最后一行,例如:

legend(DATAFROMLOOP?? [plotX1,plotX2],'x 1','x 2');

这是一个可能的解决方案,但我不知道该怎么做。

您想设置绘图对象的 DisplayName 属性,然后在完成所有绘图后调用 legend 一次。 legend 将自动从 DisplayName 属性 中检索字符串以填充图例。

hplot1 = plot(rand(10,1), 'DisplayName', 'plot1');
hplot2 = plot(rand(10,1), 'DisplayName', 'plot2');

legend([hplot1, hplot2]);

您可以轻松地将其合并到一个循环中:

% Create 10 plots within a loop
N = 10;

% Pre-allocate graphics objects
hplots = gobject(N, 1);

for k = 1:N
    hplot(k) = plot(rand(10, 1), 'DisplayName', sprintf('My plot y %d', k));
end

legend(hplot);