2017-01-26 6 views
0

Ich arbeite daran, Benutzer-Touch-Interaktionen in einer mobilen Anwendung zu visualisieren. Ich möchte sie in einer eindimensionalen Zeitlinie darstellen, die nach Aktionstyp farblich kodiert ist.Farbcodiertes Timeline-Diagramm in R

d. H., Meine zwei Variablen sind die Zeit (in ms, auf der x-Achse) und die Art der Berührung (die zur Farbcodierung der Linie verwendet wird). Farben sollten wiederholt werden können.

Idealerweise würde das Diagramm wie this aussehen, und ich habe this previous question gefunden, die etwas ähnliches liefert, aber ich frage mich, ob es nicht etwas besseres gibt.

Gibt es andere Methoden, die R verwenden, die mir erlauben, dies zu tun?

Antwort

0

Ich habe die Funktionsweise einer Basis-R-Methode. Es ist ein bisschen hacky, aber mit einigen Verbesserungen sollte es gut funktionieren. Ich habe die Abhängigkeit von den Paketen data.table, timeline und ggplot entfernt, wobei ich mich für die Verwendung der polygon-Funktion entschieden habe.

df <- data.frame(Set=c("x","y","z","x","y","z","x","y","z","x","y","z","x"), 
     StartDate=c(1380708900,1402963200,1420070400,1421280000,1410912000,1396310400,1397520000,1418860800,1404172800,1405382400,1395100800,1412121600,1413331200), 
     EndDate= c(1395099900,1404171900,1421279100,1430985600,1412120700,1397519100,1402962300,1420069500,1405381500,1410911100,1396309500,1413330300,1418859900)) 

df$StartLabel <- as.POSIXct(df$StartDate,tz="UTC",origin="1970-01-01") 
df$Set <- as.factor(df$Set) 

Oben wird das Objekt data.frame eingerichtet.

Dies stellt die Plotten Leinwand

plot(c(df$StartDate[1], tail(df$EndDate,1)), c(0.4,0.65), 
    type='n', xlab='Time', ylab='', axes=FALSE) 

Das Klacken-ily up-Schleifen Ihre Werte durch und zieht für jeden Zeitraum, um eine farbige Polygon für jede Beobachtung

for(i in 1:nrow(df)){ 
    polygon(x=c(rep(df$StartDate[i],2), rep(df$EndDate[i],2)), 
      y=c(0.6,0.4,0.4,0.6), col=rainbow(3, alpha=0.75)[df$Set[i]], 
      border=rainbow(3)[df$Set[i]]) 
} 

Dann in der ich hinzufügen Achse (dies könnte einige Feinabstimmungen erfordern, abhängig davon, wie viele der Datumsinformationen angezeigt werden sollen.)

axis(1, labels=df$StartLabel, at=df$StartDate) 

Dann wird die Legende oben im Diagramm erstellt.

legend('top', horiz=TRUE, 
     c('Test set', 'Training set', 'Validation set'), 
     pch=16, col=rainbow(3), bty='n', x.intersp=1.5, title='Group') 

Hoffentlich hilft das.

+0

Sie können auch 'rect' verwenden, wenn Sie Rechtecke (etwas andere Eingabe) zeichnen möchten, aber das spielt keine Rolle. 'rect (df $ StartDate [i], 0.4, df $ endDate [i], 0.6)' würde ein Rechteck zeichnen, ähnlich wie die allgemeine Polygonfunktion. –

+1

Brilliant, danke. Mit dieser sehr einfachen und gut erklärten Antwort konnte ich genau das machen, was ich wollte. –

0

Ohne ein funktionierendes Beispiel, würde ich vorschlagen, dass Sie ggplot2 Paket verwenden (zusammen mit ggfortify), mit denen Sie Variablen (hier: Aktionstyp) zu Farbe zuordnen können. Eine häufige Alternative ist die Größe (von Punkten/Punkten) oder die Dicke (von Linien).

Darüber hinaus finden Sie möglicherweise Zeitreihe ts Objekte (siehe example/reference here) um hilfreich zu sein. Es ist jedoch keine Voraussetzung für die Art von Daten, die Sie zeichnen möchten. Viel Glück!