2010-11-03 10 views
8

in che modo si ottiene il ridimensionamento fisso degli assi nella trama Matlab quando si esegue il tracciamento all'interno di un loop? Il mio obiettivo è vedere come i dati si evolvono all'interno del ciclo. Ho provato a utilizzare axis manual e axis(...) senza fortuna. Eventuali suggerimenti?Ridimensionamento assi Matlab

Lo so hold on fa il trucco, ma non voglio vedere i vecchi dati.

+2

Si potrebbe anche voler leggere la funzione non documentata 'LimInclude': http://undocumentedmatlab.com/blog/plot-liminclude-properties/ – Amro

risposta

6

Se si desidera visualizzare i nuovi dati tracciati sostituiscono i vecchi dati tracciati, ma mantenere gli stessi assi limiti, si può aggiorna i valori xey dei dati tracciati usando il comando SET all'interno del tuo loop. Ecco un semplice esempio:

hAxes = axes;      %# Create a set of axes 
hData = plot(hAxes,nan,nan,'*'); %# Initialize a plot object (NaN values will 
            %# keep it from being displayed for now) 
axis(hAxes,[0 2 0 4]);   %# Fix your axes limits, with x going from 0 
            %# to 2 and y going from 0 to 4 
for iLoop = 1:200     %# Loop 100 times 
    set(hData,'XData',2*rand,... %# Set the XData and YData of your plot object 
      'YData',4*rand);  %# to random values in the axes range 
    drawnow       %# Force the graphics to update 
end 

Quando si esegue quanto sopra, si vedrà un salto asterisco in giro per gli assi per un paio di secondi, ma i limiti assi rimane fissa. Non è necessario utilizzare il comando HOLD perché si sta semplicemente aggiornando un oggetto trama esistente, non aggiungendone uno nuovo. Anche se i nuovi dati si estendono oltre i limiti degli assi, i limiti non cambieranno.

+4

+1 Ho anche un paio di suggerimenti: 1) per evitare lo sfarfallio, dovresti abilitare il doppio buffering 'set (gcf, 'DoubleBuffer', 'on')'. 2) se vuoi aumentare la velocità di disegno e ottenere un'animazione più fluida, imposta la proprietà 'EraseMode' su qualcosa di diverso da 'normale' (in questo caso userei' xor'). Ovviamente dovrai utilizzare funzioni di basso livello come linea, patch, testo, ecc. Consulta questa guida per maggiori dettagli: http://www.mathworks.com/support/tech-notes/1200/1204. html # Sezione% 2023 – Amro

1

È necessario impostare i limiti degli assi; idealmente lo fai prima di iniziare il ciclo.

Questo non funziona

x=1:10;y=ones(size(x)); %# create some data 
figure,hold on,ah=gca; %# make figure, set hold state to on 
for i=1:5, 
    %# use plot with axis handle 
    %# so that it always plots into the right figure 
    plot(ah,x+i,y*i); 
end 

Ciò funzionerà

x=1:10;y=ones(size(x)); %# create some data 
figure,hold on,ah=gca; %# make figure, set hold state to on 
xlim([0,10]),ylim([0,6]) %# set the limits before you start plotting 
for i=1:5, 
    %# use plot with axis handle 
    %# so that it always plots into the right figure 
    plot(ah,x+i,y*i); 
end