2017-11-20 5 views
0

ich eine riesige Menge an Daten zu zeichnen, und dank:failling zeigt Legende

x=matlab.lang.makeValidName(strcat(...)); 
assignin('base',x,I); 

für jede Schleife des Prozesses, in dem ich I caclulate, assing ich den Wert von I (ein Vektor) an den Variablenname I_Pnum1_Bnum2 wo num1 den Wert von P ist und num2 der Wert von B. Also, am Ende mir viele I ‚s Habe für:

num1=-4:-1:-14; 
num2=[0 5 10 20:20:120 150 170 200 220]; 

, deshalb, für jeden Wert von P, ich will t o Grundstück (auf der gleichen Grafik) alle I ‚s für verschiedene B:

num1=-4:-1:-14; 
num2=[0 5 10 20:20:120 150 170 200 220]; 
for i=1:length(num1) 
    legend=[]; 
    figure(i) 
    for j=1:length(num2) 
     Y=matlab.lang.makeValidName(strcat('I_p',num2str(abs(num1(i))),'_B',num2str(double(num2(j))))); 
     plot(V,eval(Y),'linewidth',2) 
     hold on 
     leg=strcat("B= ",num2str(b(j))); 
     legend=[legend leg]; 
    end 
    title(strcat("Caractéristiques I(V) @",num2str(p(i)),"dBm")) 
    legend(legend); 
end 
clc; 

Das Problem: Ich bekomme

Funktion 'subsindex String' ist nicht für Werte der Klasse definiert '' .

und es ist aufgrund der Leitungs Legende (legende), und ich verstehe nicht, warum, weil die Vektor legende gut definiert ist ..

+2

Sie rufen nicht 'legend()', sehen Sie Ihren Code. Du nennst 'Legende (Legende)', was Georgs Antwort beweist, ist keine sehr schlaue Idee. Nenne keine Summe 'sum', einen Mittelwert' oder eine Legende 'legende'. Oder allgemein gesagt: ** Verwenden Sie nicht die Namen von Built-in-Funktionen für Ihre Variablen **. – Adriaan

+1

Was ist auch eine sehr schlechte Praxis ist die Verwendung von * Dynamic Variable Names *, was bedeutet, dass die Dinge, die Sie mit 'assignin' erstellt und mit dem gefürchteten' eval' ausgewertet haben. Dies ist sehr fehleranfällig und macht Ihren Code sehr, sehr langsam, siehe [diese Antwort von mir] (https://stackoverflow.com/a/32467170/5211833) und Referenzen darin enthalten, warum. Verwenden Sie einfach eine 'Zelle' oder eine' Struktur', die für diese Art von Ding zweckbestimmt sind, ohne den riesigen Nachteil von 'eval'. – Adriaan

Antwort

1

Der Fehler tritt aufgrund eines Konflikts zwischen den Variablen mit dem Namen legend und die eingebaute MATLAB-Funktion legend(). Benenne deine Variable in z. leg1 dann sollte es wie erwartet funktionieren.

Verwandte Themen