我可以在 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,后面有一个冒号。我可能会修复该功能以使其更健壮,但是......现在这可能就足够了。