从 R 中 24 小时直方图中的 x 轴删除日期(ggplot)

Remove date from x axis in 24h histogram in R (ggplot)

我已经从数据集中的时间戳中删除了日期,因此我可以按小时绘制登录。

MV1$starttime <- format(MV1$earliestlog,format='%H:%M:%S')
MV1$starttime <- as.POSIXct(paste(Sys.Date(), MV1$starttime),  #Adds todays date
                                    format = "%Y-%m-%d %H:%M:%S")

当我用

绘制它时
MV1 %>% 
  ggplot(aes(x = starttime)) +
  geom_histogram(binwidth=30, ) +
  labs(title = "logins vs daytime between 2018 and 2020",
       subtitle = "Source: , Bin size = 30",
       x = "Time of day",
       y = "logins") 

我得到了我想要的,除了我想从 x 轴上删除今天的日期并且只保留每小时时间标签。

我试过添加

+ scale_x_discrete(breaks=c(as.POSIXct(paste(Sys.Date(), "00:00"))),
                   labels=c("00:00"))

但是我得到这个错误:

new_mapped_discrete() 中的错误: ! mapped_discrete 只能从数值向量创建对象

我也尝试删除我的 df 中的日期,但这似乎也不起作用/然后不可绘制,因为那只是一个字符列。看起来 POSIX 需要约会...

MV1$starttime <- format(as.POSIXct(strptime(MV1$starttime, "%Y-%m-%d %H:%M:%S",tz="")), format='%H:%M:%S')
MV1$starttime <- as_date(MV1$starttime)

知道如何从图表中的 x 轴删除日期,甚至可能每隔一小时左右添加更多标签吗?

TIA!

您可以尝试使用 scale_x_datetime() 格式化 x-axis 的标签,并通过将 date_format 设置为 "%H:00" 来更改默认标签(“%H” = 小时,有关可用的格式代码,请参阅 ?strptime)。可以使用参数 date_breaks 设置日期分隔符,该参数需要一个具有持续时间的字符串(例如“1 小时”、“2 小时”)。

这是一个例子:

library(ggplot2)

# Generating some timestamps
set.seed(1)
df <- data.frame(
    timestamp = sample(
      seq(as.POSIXct("2022-04-26 00:00:00"), 
          as.POSIXct("2022-04-27 00:00:00"), by = "sec"),
                size = 1000, replace = TRUE))

# Histogram with formatted date 
ggplot(df, aes(timestamp)) +
  geom_histogram(binwidth = 3600) + 
  scale_x_datetime(date_breaks = "1 hour", date_labels = "%H:00", 
                   expand = c(0, 0))

希望这对您有所帮助。