Ich möchte so etwas wie ein Kalender-Plot, aber mit Stunden über einen Monat (anstelle von Tagen über ein Jahr). Ich habe es mit ggplot geschafft, aber die Daten werden in der falschen Reihenfolge ausgefüllt.ggplot füllt Daten in der falschen Reihenfolge
Ich habe dieses reproduzierbares Beispiel:
library(ggplot2)
library(scales)
device <- "test"
dat <- data.frame(matrix(nrow=31*24, ncol=2))
dat[,1] <- seq.POSIXt(from=(as.POSIXct("2016-12-01 00:00:00")), length.out=(31*24), by="1 hour")
dat[,2] <- seq(from=1, to=nrow(dat), by=1)
colnames(dat) <- c("Zeit", device)
dat$month<-as.numeric(as.POSIXlt(dat$Zeit)$mon+1)
dat$monthf<-factor(dat$month)
dat$monthf<-factor(dat$month,levels=as.character(1:12),labels=c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),ordered=TRUE)
dat$week <- as.numeric(format(dat$Zeit,"%W"))
dat$weekday = as.POSIXlt(dat$Zeit)$wday
dat$weekdayf<-factor(dat$weekday,levels=(c(1:6,0)),labels=(c("Mon","Tue","Wed","Thu","Fri","Sat","Sun")),ordered=TRUE)
dat$day <- as.numeric(format(dat$Zeit,"%d"))
dat$dayf<-factor(dat$day)
dat$hour <- as.numeric(format(dat$Zeit,"%H"))
dat$hourf<-factor(dat$hour)
plot(ggplot(dat, aes(hourf, week, fill = dat[2])) +
scale_y_reverse() +
geom_tile(colour = "white") +
facet_wrap(monthf~weekdayf, ncol=7) +
scale_fill_gradientn(colours=c("darkgreen", "green", "yellow", "red","darkred"),
values=rescale(c(0, 0.25, 0.5, 0.75, 1)),
guide="colorbar") +
xlab("") + ylab("") + ggtitle(device)
)
Dies ist nur ein Beispiel meines Problem zu zeigen. Wie Sie sehen können, sind die Tage selbst korrekt (der Dezember war zuerst ein Donnerstag, der 31. Dezember war ein Samstag), aber die Daten werden falsch ausgefüllt (vertikal statt horizontal).
Was mache ich falsch?
Bei der Verwendung von 'ggplot()' Funktion sollten Sie nur mit ihrem Namen auf Ihre Spalte verweisen - test' repalce 'füllen = dat [2]' mit 'füllen =. –