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.
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. –
Brilliant, danke. Mit dieser sehr einfachen und gut erklärten Antwort konnte ich genau das machen, was ich wollte. –