2010-11-03 8 views
8

Jak dokładnie uzyskać stałe skalowanie osi na wykresie Matlab podczas drukowania w pętli? Moim celem jest sprawdzenie, w jaki sposób dane ewoluują wewnątrz pętli. Próbowałem używać axis manual i axis(...) bez powodzenia. Jakieś sugestie?Skalowanie osi Matlab

Wiem, że hold on robi lewę, ale nie chcę widzieć starych danych.

+2

Możesz również przeczytać o nieudokumentowanej funkcji 'LimInclude': http://undocumentedmatlab.com/blog/plot-liminclude-properties/ – Amro

Odpowiedz

6

Jeśli chcesz zobaczyć nową wykreślone dane zastępują stare dane wykreślane, ale zachować te same osie limitów, można zaktualizuj wartości X i Y wykreślanych danych za pomocą polecenia SET w pętli. Oto prosty przykład:

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 

Po uruchomieniu powyższego, pojawi się gwiazdka wokół skok w osiach na kilka sekund, ale limity osie pozostanie stała. Nie musisz używać polecenia HOLD, ponieważ właśnie aktualizujesz istniejący obiekt wydruku, nie dodając nowego. Nawet jeśli nowe dane wykraczają poza ograniczenia osi, limity nie ulegną zmianie.

+4

+1 Mam również kilka sugestii: 1) aby uniknąć migotania, powinieneś włączyć "buforowanie" podwójnego buforowania (gcf, "DoubleBuffer", "on") '. 2) jeśli chcesz zwiększyć szybkość rysowania i uzyskać płynniejszą animację, ustaw właściwość 'EraseMode' na coś innego niż" normalny "(w tym przypadku użyłbym' xor'). Oczywiście będziesz musiał użyć funkcji niskiego poziomu, takich jak linia, łatka, tekst itp. Więcej informacji znajdziesz w tym przewodniku: http://www.mathworks.com/support/tech-notes/1200/1204. html # Section% 2023 – Amro

1

Musisz ustawić ograniczenia osi; najlepiej to zrobić przed uruchomieniem pętli.

To nie zadziała

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 

To będzie działać

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