r - 在ggplot中设置日期时间的x轴限制

标签 r ggplot2

我想利用ggplot在折线图中绘制特定日期的特定 parking 场的占用率。

我的数据框如下所示:

head(ParkingSub4)
    FreeSpaceShort ShortCapacity            DateTime OccupancyRateShort       Date  Weekday WeekNumber  Week
310801            257           373 2017-02-25 00:04:41          0.3109920 2017-02-25 Saturday         08 FALSE
310843            260           373 2017-02-25 00:09:41          0.3029491 2017-02-25 Saturday         08 FALSE
310885            261           373 2017-02-25 00:14:41          0.3002681 2017-02-25 Saturday         08 FALSE
310927            260           373 2017-02-25 00:19:41          0.3029491 2017-02-25 Saturday         08 FALSE
310969            260           373 2017-02-25 00:24:41          0.3029491 2017-02-25 Saturday         08 FALSE
311011            263           373 2017-02-25 00:29:41          0.2949062 2017-02-25 Saturday         08 FALSE

class(ParkingSub4$DateTime)
[1] "POSIXlt" "POSIXt" 

当我尝试绘制特定日期的概览时,假设2017年2月23日,我使用以下代码:
ggplot(data = ParkingSub4, 
       aes(x=DateTime, y=OccupancyRateShort)) + geom_line(size = 1.25) + facet_wrap(~Weekday) +
      scale_x_datetime(labels=date_format("%H:%m"), breaks = date_breaks("2 hours")) +
      theme_linedraw()

然后我得到的是以下情节:

enter image description here

如您所见,情节在23:02开始和结束。我希望该情节在该天的00:00:00开始并在23:59:59结束。我怎样才能做到这一点?

提前谢谢了!

编辑/更新:
添加以下内容会导致x轴从00:00开始和结束:
ggplot(data = ParkingSub4, 
   aes(x=DateTime, y=OccupancyRateShort)) + geom_line(size = 1.25) + facet_wrap(~Weekday) +
  scale_x_datetime(labels=date_format("%H:%m"), breaks = date_breaks("2 hours"), expand=c(0,0)) +
  xlim(c(as.POSIXct('2017-02-23 00:00:00', format = "%Y-%m-%d %H:%M:%S"),
     as.POSIXct('2017-02-24 00:00:00', format = "%Y-%m-%d %H:%M:%S"))) +
  theme_linedraw()

唯一的事情是执行后我得到以下消息:'x'的比例已经存在。为“x”添加另一个比例,它将替换现有比例。

这意味着scale_x_datetime(labels=date_format("%H:%m"), breaks = date_breaks("2 hours")被以下内容覆盖:xlim(c(as.POSIXct('2017-02-23 00:00:00', format = "%Y-%m-%d %H:%M:%S"), as.POSIXct('2017-02-24 00:00:00', format = "%Y-%m-%d %H:%M:%S"))

那也不是我想要的,因为现在将休息时间设置为6小时而不是2小时,而且我也无法指定标签上设置了哪些信息(“%H:%m”)。

最佳答案

首先,这是一些可重现的数据:

set.seed(1)
ParkingSub4 <- data.frame(DateTime = seq(as.POSIXlt('2017-02-22 23:00'), 
                                         as.POSIXlt('2017-02-24 01:00'), 
                                         len = 42), 
                          OccupancyRateShort = runif(42, 0, 1))
ParkingSub4$Weekday <- weekdays(ParkingSub4$DateTime)
接下来,这是如何重现此数据的问题:
library(ggplot2)
library(scales)
ggplot(data = ParkingSub4[ParkingSub4$Weekday == "Thursday",], 
       aes(x = DateTime, y = OccupancyRateShort)) + 
       geom_line(size = 1.25) + 
       facet_wrap(~Weekday) +
       scale_x_datetime(labels = date_format("%H:%m"), 
                        breaks = date_breaks("2 hours")) +
       theme_linedraw()
最后,这是使用scale_x_datetime的limits选项的解决方案:
lims <- as.POSIXct(strptime(c("2017-02-23 00:00", "2017-02-24 00:00"), 
                   format = "%Y-%m-%d %H:%M"))
ggplot(data = ParkingSub4[ParkingSub4$Weekday == "Thursday",], 
       aes(x = DateTime, y = OccupancyRateShort)) + 
       geom_line(size = 1.25) + 
       facet_wrap(~Weekday) +
       scale_x_datetime(labels = date_format("%H:%m"), 
                        breaks = date_breaks("2 hours"), 
                        limits = lims) +
       theme_linedraw()
更新:以下内容将删除图形左右两边的空格,休息时间将是小时,而不是过去的2分钟:
lims <- as.POSIXct(strptime(c("2017-02-23 00:00", "2017-02-23 23:59"), 
                   format = "%Y-%m-%d %H:%M"))
ggplot(data = ParkingSub4, 
       aes(x = DateTime, y = OccupancyRateShort)) + 
       geom_line(size = 1.25) +            
       scale_x_datetime(labels = date_format("%H:%M"), 
                        breaks = date_breaks("2 hours"), 
                        limits = lims, 
                        expand = c(0, 0)) +
       theme_linedraw()

关于r - 在ggplot中设置日期时间的x轴限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42762138/

相关文章:

r - ggplot2 关于我无法使用 `na.rm=T` 禁用的缺失的警告

r - Cowplot 包 : Aligning text labels in the top lefthand corner of plot space using plot_grid() in R

r - ggplot 在一个图例中使用 "colour"和 "fill"作为 astetic 到同一时间

r - 从txt文件中提取矩阵

r - 'type = "范数时如何计算 ggplot stat_ellipse() 的面积”?

r - 如何在 normalizePath 中指定路径,或解决与此相关的错误?

r - 使用 geom_segment 连接 geom_hline

根据行的子集对 r 中的因子重新排序

r - 如何在R中创建累积分布表?

r - 将参数传递给ggplot