Contenido principal

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

drawnow

Actualizar figuras y procesar callbacks

Descripción

drawnow actualiza figuras y procesa cualquier callback pendiente. Utilice este comando si modifica objetos de gráficas y desea ver las actualizaciones en la pantalla de inmediato.

ejemplo

drawnow limitrate limita el número de actualizaciones a 20 fotogramas por segundo. Si han transcurrido menos de 50 milisegundos desde la última actualización o si el renderizador de gráficas está ocupado (con el cambio anterior o porque está inicializándose), drawnow descarta la nueva actualización en ese momento. Utilice este comando si está actualizando objetos de gráficas en un bucle y no necesita ver todas las actualizaciones en la pantalla. Omitiendo las actualizaciones se pueden crear animaciones más rápidas. Los callbacks pendientes se procesan, por lo que puede interactuar con figuras durante las animaciones.

ejemplo

drawnow nocallbacks aplaza los callbacks, como el callback ButtonDownFcn, hasta el siguiente comando drawnow completo. Utilice esta opción si desea evitar que los callbacks interrumpan el código. Aplazar los callbacks deshabilita temporalmente las interacciones de la figura, como los clics del ratón o el cambio de tamaño de la figura. Aplazar los callbacks no afecta a la velocidad de la animación.

drawnow limitrate nocallbacks limita el número de actualizaciones a 20 fotogramas por segundo y omite las actualizaciones si el renderizador está ocupado. Esta sintaxis también evita que los callbacks interrumpan el código, lo que deshabilita temporalmente las interacciones de la figura.

drawnow update omite las actualizaciones si el renderizador está ocupado y aplaza los callbacks. No se recomienda esta sintaxis. Utilice la opción limitrate en su lugar.

drawnow expose actualiza figuras, pero aplaza callbacks. No se recomienda esta sintaxis. Utilice la opción nocallbacks en su lugar.

Ejemplos

contraer todo

Cree una animación de una línea que crece conforme va acumulando 2.000 puntos de datos. Utilice drawnow para mostrar los cambios en la pantalla después de cada iteración por el bucle.

h = animatedline;
axis([0 4*pi -1 1])
x = linspace(0,4*pi,2000);

for k = 1:length(x)
    y = sin(x(k));
    addpoints(h,x(k),y);
    drawnow
end

Cree una animación de una línea que crece conforme va acumulando 10.000 puntos completando estos pasos:

  • Cree un objeto de línea animada (h) y llame a la función axis para crear un objeto de ejes con límites de eje x y eje y específicos.

  • Llame a drawnow inmediatamente después del comando axis para completar la inicialización de la figura y los ejes.

  • Cree un bucle for que añada puntos a la línea animada y actualice la gráfica.

Se puede tardar mucho en mostrar cada actualización en la pantalla, dado que hay 10.000 puntos. Puede acelerar el proceso limitando el número de actualizaciones con la opción limitrate. Si llama al comando drawnow limitrate antes del final del bucle se muestran los cambios, pero solo si han transcurrido 50 milisegundos desde la última iteración.

Después del bucle, muestre las actualizaciones finales llamando a drawnow una vez más.

x = linspace(0,4*pi,2000);
h = animatedline;
axis([0 4*pi -1 1])
drawnow  % Complete initialization

for k = 1:length(x)
    y = sin(x(k));
    addpoints(h,x(k),y);
    drawnow limitrate  % Display changes
end

drawnow % Display final updates

Calcule todos los datos antes del bucle de animación.

h = animatedline;
axis([0 4*pi -1 1])
drawnow % Complete initialization
x = linspace(0,4*pi,10000);
y = sin(x);

for k = 1:length(x)
    addpoints(h,x(k),y(k));
    drawnow limitrate  % Display changes
end
drawnow % Display final updates

Si tiene cálculos largos, calcular previamente los datos puede mejorar el rendimiento. Hacer el cálculo previamente minimiza el tiempo de cálculo dejando que se ejecute sin interrupciones. Además, permite garantizar una animación suave centrándose únicamente en el código de las gráficas del bucle de animación.

Más acerca de

contraer todo

Sugerencias

  • La opción nocallbacks siempre añade los callbacks que interrumpen a la cola. Si desea descartar los callbacks que interrumpen, utilice las propiedades Interruptible y BusyAction en su lugar.

Capacidades ampliadas

expandir todo

Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool o acelere código con Parallel Computing Toolbox™ ThreadPool.

Historial de versiones

Introducido antes de R2006a