簡體   English   中英

在for循環Matlab中分配圖例

[英]Assigning legend in for-loop Matlab

我已嘗試在循環中給出圖例,但它會覆蓋以前編寫的圖例,如何將它們插入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 

創建一個單元格數組以保存圖例名稱。 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)

會產生的 在此輸入圖像描述

您可以在繪圖命令中設置DisplayName -property,而不是收集圖例字符串。 此外,您可以收集單元格數組中的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')

當遇到這種情況時,每次通過循環我都會將圖例字符串添加到字符串的單元格數組中,例如

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

然后在循環結束后顯示一次圖例:

legend(legstr);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM