2012-04-25 14 views
5

Necesito crear una película. Supongo, creo un eje y la trama en él algo muy personalizado:En el eje de Matlab, ¿cómo actualizar solo los datos mientras se mantienen todas las propiedades del eje?

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

Ahora ejecute un bucle, en donde se están actualizando sólo los valores de y.

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

¿Cuál es la manera más rápida y más fácil de actualizar el eje con el nuevo y (o x y y), manteniendo todas las propiedades de los ejes?

Respuesta

6

Una forma rápida es simplemente actualizar los valores de y de los datos que 'trazado:

%# 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 ¿Qué pasa si hay varias líneas, es decir lineHandle es un vector? Todavía puedes actualizar en un paso; sin embargo, necesita convertir los datos a una matriz de celdas.

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

Gracias, Jonas. Funciona. Por cierto, si y es una matriz, entonces lineHandle es un vector, entonces llamo set (lineHandle (i), 'ydata', newYdata (:, i)) para cada columna, ¿verdad? ¿O hay un truco para actualizar todas las columnas de y a la vez? – Serg

+1

@Serg: Sí, hay un truco. Ver mi edición – Jonas

+0

muchas gracias por esto. – Serg

0

sólo tiene que pasar el mango del eje de nuevo a trama posterior comandos

es decir

plot(ax, ...) 

en lugar de

ax = plot(...) 
+0

lo siento, aprende, pero no funciona. plot (ax, ...) elimina todas las propiedades del eje – Serg

+0

@Serg: si llama a 'hold all' antes del siguiente comando de trazado, mantendrá las propiedades de los antiguos ejes, pero también la línea anterior. – Jonas

+0

@Jonas: Lo sé, pero no quiero mantener la línea anterior. – Serg

Cuestiones relacionadas