在for循环Matlab中分配图例

时间:2012-03-21 14:24:49

标签: matlab for-loop legend

我尝试在循环中给出图例,但它会覆盖以前编写的图例,如何将它们插入if语句或for循环中。困惑

    clear;
        vin=10
 for m=1:1:14;  

        vin=vin+10
    for i=1:1:27
        Wa_Ac = PVinv.CoreSizeModel();
        PVinv.CoreSelect(Wa_Ac,i);   
        loss_ind_core= PVinv.InductorLossModel(PVinv.m_L_Selected);

        if(i==1)
        p=plot(vin,loss_ind_core,'--gs');
        hold on
        end
        if(i==2)
        p=plot(vin,loss_ind_core,'--rs');
        end %...till i=27

        legend(obj.m_Core_List(i).name);
        xlim([10e3 90e3])
        set(gca,'XTickLabel',{'10';'20';'30';'40';'50';'60';'70';'80';'90'})
        grid on
        xlabel('Vin');
        ylabel('Power loss');
    end
 end

被调用函数

function obj = CoreSelect(obj, WaAc)
             obj.m_Core_Available= obj.m_Core_List(i);
            obj.m_L_Selected.m_Core = obj.m_Core_Available;

end 

3 个答案:

答案 0 :(得分:10)

创建一个单元格数组来保存图例名称。在for循环定义类似

之前
legend_names = cell(1,27 * 14);

然后,在循环期间填充单元格:

legend_names{27*(m-1)+i} = obj.m_Core_List(i).name;

end设置图例后:

legend(legend_names);

我可能误解了索引(m vs i)以及它们与名称的关系,但重点是您可以将单元格数组传递给图例函数以创建图例一次。

一个例子是:

>> legend_names=cell(1,2);
>> legend_names{1} = 'str';
>> legend_names{2} = 'str2';
>> plot(0:4,0:4)
>> hold on
>> plot(1:5,0:4)
>> legend(legend_names)

会产生enter image description here

答案 1 :(得分:3)

您可以在绘图命令中设置DisplayName - 属性,而不是收集图例字符串。此外,您可以在单元格数组中收集linespec参数,以避免代码重复,即

linespec = {'--gs','--rs',... %# etc

(...) 

for i=1:1:27
        Wa_Ac = PVinv.CoreSizeModel();
        PVinv.CoreSelect(Wa_Ac,i);   
        loss_ind_core= PVinv.InductorLossModel(PVinv.m_L_Selected);


        p=plot(vin,loss_ind_core,linespec{i},'DisplayName',obj.m_Core_List(i).name);

end        

legend('show')

答案 2 :(得分:2)

当面对这种情况时,每次通过循环我都会将图例字符串添加到字符串的单元格数组中,例如

legstr{i} = obj.m_Core_List(i).name; 

然后在循环结束后显示一次图例:

legend(legstr);