反转ggplot时间刻度

Sah*_*svi 5 datetime r ggplot2 lubridate

我正在创建一个时间表图,以显示每个时间块中有多少事件.我已经从lubridate计算了所有这些信息,并且可以在ggplot上绘制它.但我需要反转/翻转轴,以便顶部显示早上8点,然后下午5点而不是下午5点到早上8点.

这就是我目前最终结果的片段.只需要颠倒时间顺序就可以完美.这延长了上午8点至下午5点和MF.

在此输入图像描述

我尝试使用scale_y_reverse,但这不起作用.

我看到这篇文章,但我无法弄清楚如何在我的情况下使用它:ggplot中的反向日期时间(POSIXct数据)轴

示例数据(使用dput fn创建):

df <- structure(list(ID = c(4108L, 4165L, 1504L, 2570L, 1523L, 2556L, 
3224L, 1503L, 3220L, 837L), START_TIME = structure(c(1504267200, 
1504281600, 1504258200, 1504278000, 1504263600, 1504256400, 1504258200, 
1504274400, 1504258200, 1504256400), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), END_TIME = structure(c(1504270799, 1504285199, 
1504263599, 1504281599, 1504268999, 1504259999, 1504263599, 1504279799, 
1504263599, 1504259999), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    Day = structure(c(5L, 5L, 2L, 3L, 2L, 3L, 4L, 2L, 4L, 1L), .Label = c("M", 
    "T", "W", "R", "F"), class = "factor")), row.names = c(322L, 
351L, 112L, 188L, 125L, 179L, 298L, 111L, 294L, 8L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

我的代码:

library(ggplot2)
library(scales)

ggplot(df) +
    geom_rect(aes(xmin= 0, xmax= 2, ymin = START_TIME, ymax = END_TIME), 
              color = "#ffffff", 
              position="dodge") + 
    scale_y_datetime(date_breaks="1 hour", labels = date_format("%I:%M %p"), expand = expand_scale(.1)) + 
    theme_minimal() +
    theme(axis.ticks.x = element_blank(),
            axis.text.x = element_blank(),
            panel.grid = element_blank(),
            panel.grid.major.y = element_line(color = "#cccccc"),
            axis.title = element_blank()) +
    facet_wrap(~Day, nrow=1) 
Run Code Online (Sandbox Code Playgroud)

Jon*_*ing 5

我无法在datetime刻度范围内执行此操作,但是另一种方法是转换为数字刻度并手动处理标签:

library(lubridate)
df %>% 
  mutate(stime = hour(START_TIME) + minute(START_TIME)/60,
         etime = hour(END_TIME) + minute(END_TIME)/60) %>%

  ggplot() +
  geom_rect(aes(xmin= 0, xmax= 2, ymin = stime, ymax = etime), 
            color = "#ffffff", 
            position="dodge") + 
  scale_y_reverse(breaks = 6:23, 
                     labels = c(paste0(6:11, ":00 AM"), 
                                "12:00 PM",
                                paste0(1:11, ":00 PM")), 
                     expand = expand_scale(.1)) + 
  theme_minimal() +
  theme(axis.ticks.x = element_blank(),
        axis.text.x = element_blank(),
        panel.grid = element_blank(),
        panel.grid.major.y = element_line(color = "#cccccc"),
        axis.title = element_blank()) +
  facet_wrap(~Day, nrow=1) 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明