R中是否有定义时间变量的函数?
Is there a function to define the time variable in R?
我有时间变量和其他变量。我想将我的第一个变量定义为时间,并使用 ggplot 为其他两个关于时间的变量绘制一个漂亮的图。
我没有尝试任何代码,因为我被困在如何找出我想要的东西上。但是,这里有一个(想法代码)可能会模仿我想要的,在此之前,我的数据有 15 行:
data <- structure(list(ATime = structure(1:15, .Label = c("00:00", "00:05",
"00:10", "00:15", "00:20", "00:25", "00:30", "00:35", "00:40",
"00:45", "00:50", "00:55", "01:00", "01:05", "01:10", "01:15",
"01:20", "01:25", "01:30", "01:35", "01:40", "01:45", "01:50",
"01:55", "02:00", "02:05", "02:10", "02:15", "02:20", "02:25"), class = "factor"),
ASpeed5 = c(34, 40, 38, 55, 56, 60, 66, 49, 48, 29, 67, 78,
39, 53, 73), BSpeed5 = c(23, 46, 63, 64, 72, 61, 49, 48,
63, 68, 62, 27, 35, 45, 59)), row.names = c(NA, 15L), class = "data.frame")
data$ATime <- as.time(data$ATime)
ggplot(data, aes(x = ATime, y1 = ASpeed5, y2 = BSpeed5))+
geom_line(color = y1, y2)
我期望关于时间(x 轴)的每个速度(y 轴)有两条不同颜色的线
这是一个基本的 R 示例,但如果您经常处理时间,我会推荐 lubridate
包。在此示例中,我将 ATime
变量转换为日期 class。如果使用真实数据,您将需要设置自己的时区 (tz),但我在这里默认为标准。
data$ATime <- as.POSIXct(as.character(data$ATime), format="%R", tz="UTC")
data %>%
ggplot(aes(x=ATime)) +
geom_line(aes(y=ASpeed5, col=1)) +
geom_line(aes(y=BSpeed5, col=2)) +
ylab("Speed") + xlab("Time")
编辑以显示数据的子集
要显示数据的子集,您可以使用过滤器。在这种情况下,如果时间是 'less than' 和 00:10:00 标记,我将调用所有数据。与所有条件语句一样,它读作大于或小于,但当变量为日期格式时,您可以认为它早于或晚于。
data %>%
filter(ATime <= "2019-11-01 00:10:00") %>%
ggplot(aes(x=ATime)) +
geom_line(aes(y=ASpeed5, col=1)) +
geom_line(aes(y=BSpeed5, col=2)) +
ylab("Speed") + xlab("Time")
新编辑以显示完整的 24 小时 window 以及指定的轴刻度
你的评论听起来像是你想用固定的休息时间形象化整个 24 小时。您没有指定间隔,所以我选择 4 小时。此图像缩放不佳,因为数据仅出现在第一个小时。请务必为您的可视化使用合适的比例。
data$ATime <- as.POSIXct(as.character(data$ATime), format="%R", tz="UTC")
fullday <- as.POSIXct(c("00:00", "24:00"), format="%R", tz="UTC")
data %>%
ggplot(aes(x=ATime)) +
geom_line(aes(y=ASpeed5, col=1)) +
geom_line(aes(y=BSpeed5, col=2)) +
scale_x_datetime(limits = fullday, breaks="4 hours", date_labels = "%R") +
theme(axis.text.x = element_text(angle = 45, vjust=1, hjust=1)) +
ylab("Speed") + xlab("Time")
hms
包对处理时间很有用
data %>%
mutate(ATime = as.character(ATime)) %>% # easier if character rather than factor
mutate(xtime = hms::parse_hm(ATime)) %>%
gather(-ATime, -xtime, key = 'AB', value = 'Speed') %>%
ggplot(aes(x = xtime, y = Speed, colour = AB)) +
geom_point() +
geom_line() +
scale_colour_hue(l=40) +. # make the default colours a little nicer
labs(x = 'Time')
我有时间变量和其他变量。我想将我的第一个变量定义为时间,并使用 ggplot 为其他两个关于时间的变量绘制一个漂亮的图。
我没有尝试任何代码,因为我被困在如何找出我想要的东西上。但是,这里有一个(想法代码)可能会模仿我想要的,在此之前,我的数据有 15 行:
data <- structure(list(ATime = structure(1:15, .Label = c("00:00", "00:05",
"00:10", "00:15", "00:20", "00:25", "00:30", "00:35", "00:40",
"00:45", "00:50", "00:55", "01:00", "01:05", "01:10", "01:15",
"01:20", "01:25", "01:30", "01:35", "01:40", "01:45", "01:50",
"01:55", "02:00", "02:05", "02:10", "02:15", "02:20", "02:25"), class = "factor"),
ASpeed5 = c(34, 40, 38, 55, 56, 60, 66, 49, 48, 29, 67, 78,
39, 53, 73), BSpeed5 = c(23, 46, 63, 64, 72, 61, 49, 48,
63, 68, 62, 27, 35, 45, 59)), row.names = c(NA, 15L), class = "data.frame")
data$ATime <- as.time(data$ATime)
ggplot(data, aes(x = ATime, y1 = ASpeed5, y2 = BSpeed5))+
geom_line(color = y1, y2)
我期望关于时间(x 轴)的每个速度(y 轴)有两条不同颜色的线
这是一个基本的 R 示例,但如果您经常处理时间,我会推荐 lubridate
包。在此示例中,我将 ATime
变量转换为日期 class。如果使用真实数据,您将需要设置自己的时区 (tz),但我在这里默认为标准。
data$ATime <- as.POSIXct(as.character(data$ATime), format="%R", tz="UTC")
data %>%
ggplot(aes(x=ATime)) +
geom_line(aes(y=ASpeed5, col=1)) +
geom_line(aes(y=BSpeed5, col=2)) +
ylab("Speed") + xlab("Time")
编辑以显示数据的子集
要显示数据的子集,您可以使用过滤器。在这种情况下,如果时间是 'less than' 和 00:10:00 标记,我将调用所有数据。与所有条件语句一样,它读作大于或小于,但当变量为日期格式时,您可以认为它早于或晚于。
data %>%
filter(ATime <= "2019-11-01 00:10:00") %>%
ggplot(aes(x=ATime)) +
geom_line(aes(y=ASpeed5, col=1)) +
geom_line(aes(y=BSpeed5, col=2)) +
ylab("Speed") + xlab("Time")
新编辑以显示完整的 24 小时 window 以及指定的轴刻度
你的评论听起来像是你想用固定的休息时间形象化整个 24 小时。您没有指定间隔,所以我选择 4 小时。此图像缩放不佳,因为数据仅出现在第一个小时。请务必为您的可视化使用合适的比例。
data$ATime <- as.POSIXct(as.character(data$ATime), format="%R", tz="UTC")
fullday <- as.POSIXct(c("00:00", "24:00"), format="%R", tz="UTC")
data %>%
ggplot(aes(x=ATime)) +
geom_line(aes(y=ASpeed5, col=1)) +
geom_line(aes(y=BSpeed5, col=2)) +
scale_x_datetime(limits = fullday, breaks="4 hours", date_labels = "%R") +
theme(axis.text.x = element_text(angle = 45, vjust=1, hjust=1)) +
ylab("Speed") + xlab("Time")
hms
包对处理时间很有用
data %>%
mutate(ATime = as.character(ATime)) %>% # easier if character rather than factor
mutate(xtime = hms::parse_hm(ATime)) %>%
gather(-ATime, -xtime, key = 'AB', value = 'Speed') %>%
ggplot(aes(x = xtime, y = Speed, colour = AB)) +
geom_point() +
geom_line() +
scale_colour_hue(l=40) +. # make the default colours a little nicer
labs(x = 'Time')