ggplot 改变连续 y 轴值的顺序

ggplot change order of continuous y axis values

我正在尝试按小时(整数)绘制班次数据,这些数据按每天工作的 3 个不同班次(8-16、16-24、24-8)排序,作为 x 轴。我的时间是 24 小时格式,我不想按数字顺序 (0-24) 而是按班次顺序 (8-16、16-24、24-8) 绘制它们。

这是创建数据和绘图的代码。我想把 0-8 块放在 16-24 块上面。

set.seed(123)
Hour = sample(0:24, 500, replace=T)
Day = sample(0:1, 500, replace=T)

dat <- as.tibble(cbind(Hour, Day)) %>%
        mutate(Day = factor(ifelse(Day == 0, "Mon", "Tues")),
               Shift = cut(Hour, 3, labels = c("0-8", "8-16", "16-24")),
               Exposure = factor(sample(0:1, 500, replace=T)))

ggplot(dat, aes(x = Day, y = Hour)) +
        geom_jitter(aes(color = Exposure, shape = Exposure)) + 
        geom_hline(yintercept = 8) + 
        geom_hline(yintercept = 16) + 
        theme_classic()

当前剧情

这是一个有趣的问题,我已经尝试按照我想要的顺序重新编码一个新的小时变量,但是我不确定如何绘制它来显示标准的 24 小时变量。

我将如何完成此排序?

不确定我是否完全理解,但如果您将 table 分面放在 Shift 列上,它应该可以满足您的要求。首先,您必须将 Shift 列分解为您指定的顺序:


dat$Shift <- factor(dat$Shift, levels = c("0-8", "16-24", "8-16"))

ggplot(dat, aes(x = Day, y = Hour)) +
  geom_jitter(aes(color = Exposure, shape = Exposure)) + 
  facet_grid(Shift ~ ., scales = "free") +
  theme_classic()

set.seed(123)
Hour = sample(0:24, 500, replace=T)
Day = sample(0:1, 500, replace=T)

dat <- as.tibble(cbind(Hour, Day)) %>%
  mutate(Day = factor(ifelse(Day == 0, "Mon", "Tues")),
         Shift = cut(Hour, 3, labels = c("0-8", "8-16", "16-24")),
         Exposure = factor(sample(0:1, 500, replace=T)))

dat$Shift <- factor(dat$Shift, levels=rev(levels(dat$Shift)))

ggplot(dat, aes(x = Day, y = Shift)) +
  geom_jitter(aes(color = Exposure, shape = Exposure)) + 
  geom_hline(yintercept = 8) + 
  geom_hline(yintercept = 16) + 
  theme_classic()

你只需要反转关卡即可。