2012-04-25 15 views
5

Potrzebuję stworzyć film. Załóżmy, tworzę oś i działki na nim coś bardzo niestandardowego:W osi Matlaba, jak aktualizować tylko dane, zachowując jednocześnie wszystkie właściwości osi?

figure; 
ax = plot(x, y, 'linewidth', 3, 'prop1', value1, 'prop2', value2, ...); 
grid minor; 
axis(ax, [xmin xmax ymin ymax]); 
legend(ax, ...); 
xlabel(ax, ...); 
ylabel(ax, ...); 
title(ax, ...); 

Teraz biegnę pętlę, gdzie tylko wartości y są aktualizowane.

for k = 1 : N 
% y changes, update the axis 
end 

Co to najszybszy i najprostszy sposób, aby zaktualizować oś z nowym y (lub x i y), zachowując wszystkie właściwości osi?

Odpowiedz

6

Szybkim sposobem jest po prostu zaktualizować Y wartości danych, które Wykreślono:

%# note: plot returns the handle to the line, not the axes 
%# ax = gca returns the handle to the axes 
lineHandle = plot(x, y, 'linewidth', 3, 'prop1', value1, 'prop2', value2, ...); 

%# in the loop 
set(lineHandle,'ydata',newYdata) 

EDYCJA Co zrobić, jeśli istnieje wiele linii, tj. lineHandle jest wektorem? Możesz nadal aktualizować w jednym kroku; musisz jednak przekonwertować dane na tablicę komórek.

%# make a plot with random data 
lineHandle = plot(rand(12)); 

%# create new data 
newYdata = randn(12); 
newYcell = mat2cell(newYdata,12,ones(1,12)); 

%# set new y-data. Make sure that there is a row in 
%# newYcell for each element in lineH (i.e. that it is a n-by-1 vector 
set(lineHandle,{'ydata'},newYcell(:)); 
+0

Dzięki, Jonas. To działa. BTW, jeśli y jest macierzą, to lineHandle jest wektorem, więc wywołuję set (lineHandle (i), "ydata", newYdata (:, i)) dla każdej kolumny, prawda? Lub jest sztuczka, aby zaktualizować wszystkie kolumny y na raz? – Serg

+1

@Serg: Tak, jest pewna sztuczka. Zobacz moją edycję. – Jonas

+0

wielkie dzięki za to. – Serg

0

Wystarczy przekazać uchwyt oś tylna do kolejnej działki poleceń

tj

plot(ax, ...) 

zamiast

ax = plot(...) 
+0

Przepraszam, learnvst, ale to nie działa. fabuła (topór, ...) usuwa wszystkie właściwości osi. – Serg

+0

@Serg: Jeśli wywołasz 'hold all' przed następnym poleceniem drukowania, zachowujesz właściwości starymi osiami, ale także starą linią. – Jonas

+0

@ Jonas: Wiem, ale nie chcę zachować starej linii. – Serg