2012-04-25 8 views
5

Ho bisogno di creare un film. Supponiamo, creo un asse e la trama su di essa qualcosa di molto personalizzato:Nell'asse Matlab, come aggiornare solo i dati mantenendo tutte le proprietà degli assi?

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, ...); 

Ora scappo un ciclo, in cui vengono aggiornati solo i valori delle y.

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

Qual è il modo più semplice e veloce per aggiornare l'asse con il nuovo y (o x e y), mantenendo tutte le proprietà degli assi?

risposta

6

Un modo veloce è aggiornare semplicemente i valori y dei dati tracciato:

%# 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) 

EDIT Cosa succede se ci sono più righe, ad esempio lineHandle è un vettore? È ancora possibile aggiornare in un solo passaggio; è necessario convertire i dati in un array di celle, però.

%# 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

Grazie, Jonas. Funziona. BTW, se y è una matrice, quindi lineHandle è un vettore, quindi chiamo set (lineHandle (i), 'ydata', newYdata (:, i)) per ogni colonna, giusto? O c'è un trucco per aggiornare tutte le colonne di y in una sola volta? – Serg

+1

@Serg: Sì, c'è un trucco. Vedi la mia modifica. – Jonas

+0

molte grazie per questo. – Serg

0

Appena passaggio maniglia asse posteriore a trama successiva comandi

cioè

plot(ax, ...) 

anziché

ax = plot(...) 
+0

scusa, impara, ma non funziona. plot (ax, ...) rimuove tutte le proprietà dell'asse – Serg

+0

@Serg: Se si chiama 'hold all' prima del successivo comando plot, si manterranno le proprietà dei vecchi assi, ma anche la vecchia linea. – Jonas

+0

@ Jonas: lo so, ma non voglio mantenere la vecchia linea. – Serg

Problemi correlati