如何在ggplot中的x轴上定义从上午6点到上午6点的日期?

时间:2018-07-18 22:07:17

标签: r

我正在尝试按小时绘制汇总的条形图。

hourly <- data.frame(
  hour = 0:23,
  N = 7+0:23,
  hour.mod = c(18:23, 0:17))

一天是从早上6点到早上6点,所以我添加了一个偏移量hour.mod,然后:

ggplot(hourly, aes(x = hour.mod, y = N)) +
  geom_col() +
  labs(x = "6am to 6am", y = "Count") 

除了x轴刻度为0之外,它与标签相矛盾。在修补鳞片时:scale_x_discrete(breaks = c(6, 10, 14, 18, 22))完全消失了鳞片;目前可以使用,但效果欠佳。

如何指定x轴从0或23以外的一个小时开始?有没有不创建偏移列的方法吗?我是新手,所以请假设您正在向乡村白痴解释。

1 个答案:

答案 0 :(得分:2)

您没有说想看到的内容,但是很明显,您应该使用scale_x_continuous并通过“手动”或一些简单的数学方法以某种方式移动标签:

ggplot(hourly, aes(x = hour.mod, y = N)) +
   geom_col() +
   labs(x = "6am to 6am", y = "Count") + 
   scale_x_continuous(breaks= c(0,4,8,12,16), labels = c(6, 10, 14, 18, 22) )

或者也许:

ggplot(hourly, aes(x = hour.mod, y = N)) +
   geom_col() +
   labs(x = "6am to 6am", y = "Count") + 
   scale_x_continuous(breaks= c(6, 10, 14, 18, 22)-6, # shifts all values lower
                     labels = c(6, 10, 14, 18, 22) )

可能需要使用模运算,在R中涉及使用%%%/%

1:24 %% 12
 [1]  1  2  3  4  5  6  7  8  9 10 11  0  1  2  3  4  5  6  7  8  9 10 11  0