2017-04-15 1 views
1

Je souhaite tracer certaines données en temps réel en fonction du temps.Tracé heure/date en temps réel dans R

Le code J'utilise est très similaire à cela, pris d'une autre réponse que je lis ici:

n=1000 
df=data.frame(time=1:n,y=runif(n)) 
window=100 
for(i in 1:(n-window)) 
{ 
    flush.console() 
    plot(df$time,df$y,type='l',xlim=c(i,i+window)) 
    Sys.sleep(0.1) 
} 

Je voudrais tracer le temps sur l'axe x du graphique. Alors je l'ai fait:

n=1000 
df=data.frame(time=0,y=runif(n)) 
window=100 
for(i in 1:(n-window)) 
{ 

    **df$time[i] <- format(Sys.time(),"%X")** 

    flush.console() 
    plot(df$time,df$y,type='l',xlim=c(i,i+window)) 
    Sys.sleep(0.1) 
} 

Mais je reçois des erreurs, faites d'entre vous avez une aide/conseil

Un grand merci,

Ben

EDIT

I Je veux que cela fonctionne 900 fois, à une fréquence donnée. Pourrais-je calculer les valeurs de temps avant la boucle for. par exemple.

df $ DateTime [1] = Sys.time()

POUR (;;) df DateTime $ [i] = df $ DateTime [i] + X secondes
FIN POUR BOUCLE

FOR (;;) //// simule le tracé en direct? FIN DE LA BOUCLE

Répondre

2

Pour tracer l'heure, vous avez besoin d'un objet temporel. J'ai légèrement modifié votre code pour avoir un vecteur temporel. En outre, je change la façon dont vous avez indexé le vecteur pour se débarrasser de la xlim.

n=1000 
df=data.frame(time=Sys.time()+1:n,y=runif(n)) 
window=100 
for(i in 1:(n-window)) 
{ 
    flush.console() 
    df1 <-df[i:(i+window),] 
    plot(df1$time,df1$y,type='l') 
    Sys.sleep(0.1) 
} 

EDIT Solution pour ajouter des heures. Vous pouvez ajouter des heures mais cela semble ralentir le processus. Comme vous pouvez le voir, j'ai ajouté le axis.POSIXct appel, mais je devais ralentir le Sys.Sleep à 0,5 et vous pouvez à peine voir l'axe des x:

n=1000 
df=data.frame(time=Sys.time()+1:n,y=runif(n)) 
window=100 
for(i in 1:(n-window)) 
{ 
    flush.console() 
    df1 <-df[i:(i+window),] 
    x_at <-pretty(df1$time) 
    x_labels <-format(pretty(df1$time),"%H:%M:%S") 
    plot(df1$time,df1$y,type='l',xaxt='n') 
    axis.POSIXct(side=1,at=x_at,labels=x_labels) 
    Sys.sleep(0.5) 
} 
+0

Impressionnant merci jamais tellement! Y at-il un moyen que je peux obtenir l'heure d'afficher en tant que HH: MM: SS? –

+0

@BenjaminBusby Voir mon édition. –

+0

Super! Merci: D –