我可以在 Rstudio 中设置包含时间数据的 y 轴的限制吗?
Can i set the limit of y axis which contains time data in Rstudio?
嗨,我在 R 中遇到了一个问题。
我无法处理 y 轴,它是小时 : 分钟格式。
这是代码示例。
library("data.table")
library("ggplot2") #load library
time <- c("00:05", "06:57","19:00","23:10","00:32","15:00","01:30","03:20") #time data
class <- c("Math", "Eng", "History","Math", "Eng", "History","Math", "Eng") #Course data
day <- c("1/21","1/21","1/21","1/21","1/22","1/22","1/23","1/23") #day data
df <- data.frame(time, class, day) #dataframe
df$time = as.POSIXct(df$time, format = "%H:%M") #make char to time format
pic <- ggplot(df, aes(x = class, y=df$time)) +
scale_y_datetime(date_breaks = "1 hour") +
facet_grid(. ~ day) #draw picture, break time in 1 hour
pic
如果我画这个图,那么Y轴有年月日。
我试图通过as.POSIXct擦除年月日的格式,但没有成功。
另外,时间限制不是从00:00到24:00,而是从1/2023:00到1/2200:00
我不知道怎么解决它。
结合 IanCampbell 提到的 date_labels=
并使用确保您看到 24:00
而不是 00:00
的 将其更改为 labels=
,我们可以得到(我想)你想要什么。
format.myPOSIX <- function(x, tz = "", usetz = FALSE, ...) {
midnight <- format.POSIXct(x, format = "%H") %in% "00"
dayminus1 <- x - 86400
x[midnight] <- dayminus1[midnight]
gsub(" 00:", " 24:", format.POSIXct(x, tz = tz, usetz = usetz, ...))
}
print.myPOSIX <- function(x, tz = "", usetz = TRUE, ...) {
print(format.myPOSIX(x, tz = tz, usetz = usetz))
}
(其中一些不是绝对必要的,但是...)
ggplot(df, aes(x = class, y=time)) +
scale_y_datetime(
date_breaks = "1 hour",
labels = function(x) format.myPOSIX(x, format = " %H:%M")
) +
facet_grid(. ~ day)
注意格式字符串中的 space:" %H:%M"
。这是因为 format.myPOSIX
中的一个硬编码假设:小时存在并且前面有一个 space,后面有一个冒号。我可能会修复该功能以使其更健壮,但是......现在这可能就足够了。
嗨,我在 R 中遇到了一个问题。
我无法处理 y 轴,它是小时 : 分钟格式。
这是代码示例。
library("data.table")
library("ggplot2") #load library
time <- c("00:05", "06:57","19:00","23:10","00:32","15:00","01:30","03:20") #time data
class <- c("Math", "Eng", "History","Math", "Eng", "History","Math", "Eng") #Course data
day <- c("1/21","1/21","1/21","1/21","1/22","1/22","1/23","1/23") #day data
df <- data.frame(time, class, day) #dataframe
df$time = as.POSIXct(df$time, format = "%H:%M") #make char to time format
pic <- ggplot(df, aes(x = class, y=df$time)) +
scale_y_datetime(date_breaks = "1 hour") +
facet_grid(. ~ day) #draw picture, break time in 1 hour
pic
如果我画这个图,那么Y轴有年月日。 我试图通过as.POSIXct擦除年月日的格式,但没有成功。
另外,时间限制不是从00:00到24:00,而是从1/2023:00到1/2200:00
我不知道怎么解决它。
结合 IanCampbell 提到的 date_labels=
并使用确保您看到 24:00
而不是 00:00
的 labels=
,我们可以得到(我想)你想要什么。
format.myPOSIX <- function(x, tz = "", usetz = FALSE, ...) {
midnight <- format.POSIXct(x, format = "%H") %in% "00"
dayminus1 <- x - 86400
x[midnight] <- dayminus1[midnight]
gsub(" 00:", " 24:", format.POSIXct(x, tz = tz, usetz = usetz, ...))
}
print.myPOSIX <- function(x, tz = "", usetz = TRUE, ...) {
print(format.myPOSIX(x, tz = tz, usetz = usetz))
}
(其中一些不是绝对必要的,但是...)
ggplot(df, aes(x = class, y=time)) +
scale_y_datetime(
date_breaks = "1 hour",
labels = function(x) format.myPOSIX(x, format = " %H:%M")
) +
facet_grid(. ~ day)
注意格式字符串中的 space:" %H:%M"
。这是因为 format.myPOSIX
中的一个硬编码假设:小时存在并且前面有一个 space,后面有一个冒号。我可能会修复该功能以使其更健壮,但是......现在这可能就足够了。