[英]R: using ggplot2 to plot daily dataset subfigure in a time series
我正在嘗試使用ggplot2繪制每日時間序列。
我的問題:
時間序列如下所示:
Sensor Time
-0.28 1-25-16 15:00
-0.27 1-25-16 15:01
-0.27 1-25-16 15:02
-0.26 1-25-16 15:03
-0.25 1-25-16 15:04
-0.26 1-25-16 15:05
-0.28 1-25-16 15:06
-0.28 1-25-16 15:07
-0.27 1-25-16 15:08
-0.30 1-25-16 15:12
-0.31 1-25-16 15:13
-0.30 1-25-16 15:14
-0.30 1-25-16 15:15
-0.31 1-25-16 15:16
-0.31 1-25-16 15:17
-0.31 1-25-16 15:18
-0.31 1-25-16 15:19
-0.30 1-25-16 15:20
-0.27 1-25-16 16:00
-0.28 1-25-16 16:01
-0.27 1-25-16 16:02
-0.26 1-25-16 16:03
-0.26 1-25-16 16:04
-0.26 1-25-16 16:06
謝謝。
在時區,多年期,夏時制等方面正確地做到這一點實際上是非常棘手的。我已經做了很多。 這可以幫助您入門。
library(ggplot2)
library(lubridate)
addTimePanelVars <- function(df, stime, tvname="time", tzab = "US/Pacific", fdow = 0) {
if (tvname != "time") {
df$time <- df[[tvname]]
}
daysecs <- 24 * 60 * 60
soy <- as.POSIXct(sprintf("%d-01-01 00:00:00", year(stime)), tz = tzab)
dowsoy <- (as.POSIXlt(soy)$wday - fdow) %% 7
df$dn <- as.POSIXlt(df$time)$yday
df$dayFromStart <- as.numeric(difftime(as.Date(df$time, tz = tzab),
as.Date(soy, tz = tzab), units = "days"))
df$wn <- trunc(((df$dn + dowsoy)) / 7)
df$cumwn <- trunc(((df$dayFromStart + dowsoy)) / 7)
df$date <- as.Date(df$time,tz=tzab)
df$wkrow <- trunc(df$cumwn / 4)
df$wkcol <- trunc(df$cumwn %% 4)
df$dow <- (as.POSIXlt(df$time)$wday - fdow) %% 7
df$timedy <- (hour(df$time) + minute(df$time) / 60 + +second(df$time) / 3600) / 24
df$timewk <- df$dow + df$timedy
df$timehr <- df$timedy*24
return(df)
}
set.seed(123)
n <- 60 * 24 * 18 # 18 days
tzab <- "US/Pacific"
stime <- as.POSIXct("2016-01-16 15:00:00", tz = tzab)
t <- seq(stime,by=60, length.out = n)
s <- rnorm(n,-0.3,0.02)
df <- data.frame(time = t, sensor = s)
df <- addTimePanelVars(df, stime, tz = tzab)
df$daytime <- ifelse(8 <= hour(df$time) & hour(df$time) < 18, "day", "night")
ggplot(df) +
geom_point(aes(x = timehr, y = sensor, color = daytime)) +
scale_x_continuous(breaks = 3 * 0:8) +
scale_color_manual(values = c(day = "red", night = "blue")) +
facet_wrap( ~ date )
產生這個:
不太確定您想如何處理白天/夜晚的事情。 例如,您可以將子集和白天和黑夜顯示為不同的數字。
但是請注意在變量addTimePanelVars
也被設置為每周做面板,采用facet_grid(wkrow ~ wkcol)
+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.