R: actualizar un gráfico dinámicamente [cerrado]

9

Esta es una pregunta de visualización de datos. Tengo una base de datos que contiene algunos datos que se revisan constantemente (actualización en línea). ¿Cuál es la mejor manera en R para actualizar un gráfico cada 5 o 10 segundos? (sin trazar de nuevo todo es posible)?

rojo

RockScience
fuente

Respuestas:

7

Suponiendo que desea actualizar R windows()o x11()gráfico, puede usar funciones como points()y lines()para agregar nuevos puntos o extender líneas en un gráfico sin volver a dibujar; Sin embargo, tenga en cuenta que esto no cambiará el rango de ejes para acomodar puntos que pueden quedar fuera de la vista. En general, es una buena idea hacer que el trazado en sí sea instantáneo, por ejemplo, moviendo el esfuerzo de cálculo para hacer una representación media reducida que se pueda trazar rápidamente, como un mapa de densidad en lugar de una gran cantidad de puntos o reducir la resolución de los trazados de línea ( aunque esto puede ser complejo).

Para mantener la sesión R por un tiempo determinado sin espera ocupada, use Sys.sleep().


fuente
(+1) Olvidé la Sys.sleep()función. Creo que el rango de eje y debería apostar por adelantado, ¿no? yxy
chl
@chl, sí la y rangos de ejes deben establecerse de antemano. yxy
mpiktas
1
@mpiktas O simplemente inicie la trama con una sola llamada plot(), posiblemente 0,0,type="n"si aún no hay nada para trazar ... De hecho, esto es mucho más fácil que ding plot.new()y agregar todas las cosas como ejes o etiquetas a mano.
De hecho, esto parece lo más simple ... pero es una pena que los ejes no estén actualizados. Como quiero actualizar una serie temporal en línea, y sé a qué velocidad se mueve el eje x, creo que puedo replicar todo cada n actualizaciones.
RockScience
8

Para la visualización sin conexión, puede generar archivos PNG y convertirlos a un GIF animado usando ImageMagick . Lo usé para la demostración (aunque esto redibujó todos los datos):

source(url("http://aliquote.org/pub/spin_plot.R"))
dd <- replicate(3, rnorm(100))
spin.plot(dd)

Esto genera varios archivos PNG, con el prefijo fig. Luego, en un shell un * x,

convert -delay 20 -loop 0 fig*.png sequence.gif

ofrece esta animación (inspirada en los métodos bioestadísticos modernos aplicados con S-Plus , S. Selvin, 1998):

texto alternativo

Otra opción que parece mucho más prometedora es confiar en el paquete de animación . Hay un ejemplo con una regresión automática de ventana móvil que debería permitirle comenzar.

chl
fuente