Matlab中for循环中的图例

Posted

技术标签:

【中文标题】Matlab中for循环中的图例【英文标题】:Legend in Matlab in for loop 【发布时间】:2021-11-21 21:23:10 【问题描述】:

我有一个看起来有点像这样的 for 循环:

RowToPlot =2;
Num=2;
SwatchToPlots=[2 3];
DataToGraph=rand(168,97);
[RowsData,ColsData]=size(DataToGraph);
x=1:RowsData;

figure
for idx=1:Num
    SwatchToPlot=SwatchToPlots(1,idx);
    if RowToPlot==1
        if SwatchToPlot==1
            plot(x,DataToGraph(:,22:25));hold on;
            legend('ex1', 'ex2', 'ex3', 'ex4');
        elseif SwatchToPlot==2
            plot(x,DataToGraph(:,46:49));hold on;
            legend('ex1', 'ex2', 'ex3', 'ex4');
        elseif SwatchToPlot==3
            plot(x,DataToGraph(:,70:73));hold on;
            legend('ex1', 'ex2', 'ex3', 'ex4');
        elseif SwatchToPlot==4
            plot(x,DataToGraph(:,94:97));hold on;
            legend('ex1', 'ex2', 'ex3', 'ex4');
        end
    elseif RowToPlot==2
        if SwatchToPlot==1
            plot(x,DataToGraph(:,18:21));hold on;
            legend('ex1', 'ex2', 'ex3', 'ex4');
        elseif SwatchToPlot==2
            plot(x,DataToGraph(:,42:45));hold on;
            legend('ex1', 'ex2', 'ex3', 'ex4');
        elseif SwatchToPlot==3
            plot(x,DataToGraph(:,66:69));hold on;
            legend('ex1', 'ex2', 'ex3', 'ex4');
        elseif SwatchToPlot==4
            plot(x,DataToGraph(:,90:93));hold on;
            legend('ex1', 'ex2', 'ex3', 'ex4');
        end
    end
end

每条绘图线在 y 轴上绘制 4 条线,根据 Num 中的值,for 循环可以重复并且可以绘制更多线。如果 for 循环只发生一次,那么我可以使用 legend() 函数轻松添加图例。但是,如果 for 循环不止一次发生,则新图例不会附加到现有图例。如何将图例附加到已经存在的图例中,而不是仅仅替换它?

*注意:我已经阅读了类似的问题,但由于我正在使用单个 plot() 函数绘制四条 y 线,因此仍然无法使其正常工作。

【问题讨论】:

“我已经阅读了类似的问题,但由于我正在使用单个 plot() 函数绘制四条 y 线,因此我仍然无法使其工作。”请展示您尝试过的内容,这会让其他人更容易帮助您。 【参考方案1】:

最好始终提供Minimum Reproducible Example。由于没有提供,我编写了一个虚拟脚本,用于在循环中使用 legend 命令。

close all; clc;

t = 0:0.01:10; % time vec
w = 1;         % fixed frequency in rad

arrayLimiter = length(t);
% create some sine signals with phase delay for demo purposes
signal1 = zeros(arrayLimiter, 1);
signal2 = zeros(arrayLimiter, 1);
signal3 = zeros(arrayLimiter, 1);

for i = 1:arrayLimiter
  signal1(i) = sin(2*pi*w*t(i) + 0);
  signal2(i) = sin(2*pi*w*t(i) + 30);
  signal3(i) = sin(2*pi*w*t(i) + 60);
end

figure; 
hold on; grid on; set(gcf, 'color', 'w'), ylim([-2 2]),
for i = 1:3
  plot(t, signalArr(:, i), 'DisplayName', ['Singal ', num2str(i)]),
end
legend show,

给出以下输出: 您可以使用绘图函数的“DisplayName”功能以编程方式添加尽可能多的图例条目以及信号。如果有任何不清楚的地方,请告诉我。

【讨论】:

以上是关于Matlab中for循环中的图例的主要内容,如果未能解决你的问题,请参考以下文章

For 循环中的 Matplotlib 图例

使用 for 循环绘图时,如何跳过图例中的重复标签?

Matlab for循环,Python中的不同值

matlab用for循环求矩阵乘法

MATLAB for循环

MATLAB for循环内if语句判断失败