Hoe de inhoud van een celmatrix in dezelfde plot te indexeren en te plotten?

Ik hoop dat iemand me kan helpen met dit probleem.

Aanvankelijk was ik aan het plotten voor de arrays w en oLmag met behulp van het volgende script.

figure(1)
for i=1:dsize(1)
    subplot(2,1,1);
    semilogx(w,oLmag(i,:),color(i));
    if(i==1), hold; end
end

Nu heb ik alle oLmag's verzameld met verschillende w's met behulp van celarrays oLmag_c en w_c verzameld, zodat oLmag_c {1} komt overeen met w_c {1} en zo verder. Nu wil ik in één plot alle bijbehorende oLmag's en w's plotten.

hold all;
for i=1:dsize(1)
    for k=1:length(w)
        subplot(2,1,1);
        semilogx(w{k},oLmag{k}(i,:),color(i));
        if(i==1); hold; end
     end;
 end

Dit lijkt niet op het bijeenhouden van alle plots en produceert slechts één plot. Ook wil ik op elke plot een legende hebben zoals 1,2 ... zeggen dat 1 staat voor w_c {1} en oLmag_c {1} plot enzovoort.

0

1 antwoord

In het tweede codeblok wordt hold tweemaal aangeroepen. Eenmaal aan het begin met hold all , dan een tweede keer in de eerste iteratie van de lus

if(i==1); hold; end  

De tweede aanroep van vasthouden schakelt de hold-status van de huidige assen. Dit verklaart waarschijnlijk waarom je maar één plot krijgt.

Ik zou je benadering van het aanroepen van hold on of _hold (gca, 'on') aan het begin wijzigen en het verwijderen van de tweede aanroep in de geneste lussen (regel 6 van het tweede codeblok).

Dus na het toevoegen van voorbeeldgegevens en het verwijderen van regel 6 kon het codeblok zoiets lezen

%# First setup the axes and set 'hold on'
hAxes(1) = subplot(2,1,1)
hAxes(2) = subplot(2,1,2)
hold(hAxes,'on'); %# Using the function form of hold instead
%#hold all 

%# some sample data
w={[1 2] [3 4] [4 5]}; 
oLmag={[22.9983 16.8412; 22.3405 16.1763], ...
       [16.7192 14.0807;14.2588 11.4160], ...
       [12 13;15 14]}; 

 %# nested loops for plotting
 for k=1:length(oLmag) 
    for i=1:length(oLmag{k}) 
        xy=[w{k};oLmag{k}(i,:)]; 
        subplot(2,1,1);
        semilogx(w{k},oLmag{k}(i,:)); 
        subplot(2,1,2);
        %# add plots to second axes here...

        %#if(i==1);hold;end; %# remove extra call to hold
    end;
end
0
toegevoegd
w = {[1 2] [3 4] [4 5]}; oLmag = {[22.9983 16.8412; 22.3405 16.1763], [16.7192 14.0807; 14.2588 11.4160], [12 13; 15 14]}; Houd (GCA, 'aan'); % houdt alles in voor k = 1: lengte (oLmag) voor i = 1: lengte (oLmag {k}) xy = [w {k}; oLmag {k} (i, :)]; % Subplot (2,1,1); semilogx (w {k}, {k} oLmag (i, :), kleur (i)); subplot (2,1,1); semilogx (xy, kleur (i)); if (i == 1) te houden; uiteinde; end; end
toegevoegd de auteur skk, de bron
Bedankt voor je reactie
toegevoegd de auteur skk, de bron
@ Azim: Bedankt voor je antwoord..Ik voeg boven de waarden en codes van de steekproeven die ik heb gebruikt toe zodat je kunt rennen en zien. Ik heb geprobeerd de codes in lijnen te laten inspringen, maar faalde. Ik zou 6 lijnen in de plot moeten krijgen , 2 voor elke inhoud in w- en oLmag-cel. Maar deze code produceert slechts 4 regels. ik denk dat dingen niet op de juiste plaats vallen. Ik hoop van je te horen. Bedankt
toegevoegd de auteur skk, de bron
je kunt colon verwijderen uit de regel xy = [w {k}; oLmag {k} (i, :)] om te zien wat ik probeer te plotten ... Bedankt
toegevoegd de auteur skk, de bron
@ Azim: wauw, dit werkte. Heel erg bedankt. Waardeer je hulp echt.
toegevoegd de auteur skk, de bron