Выделение конкретных дат во временном ряду, построенном в ggplot2

#r #ggplot2

#r #ggplot2

Вопрос:

Мне нужно визуализировать данные с метеостанции за ~ 3 месяца. В течение сезона отбор проб газа в грунте производился в 5 конкретных дат. Я хотел бы выделить эти даты на графике с данными метеостанции.

Я пытаюсь добиться этого, поместив серые полосы на geom_point ggplot , которые я сделал

 p <- ggplot(ws_may_sep_plot, aes (x = date_time, y = temperature))  
geom_point(size=0.5)  
scale_x_datetime(breaks = "2 week")
ggtitle("Ambient temperature")

may_start <- "2012-05-22"
may_start_iso <- as.Date(may_start)

may_end <- "2012-05-23"
may_end_iso <- as.Date(may_start)

rect <- data.frame(xmin= may_start_iso, xmax= may_end_iso, ymin=-Inf, 
ymax=Inf)

p   geom_rect(data=rect, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
           color="grey20",
           alpha=0.5,
           inherit.aes = FALSE)
  

Вот ссылка на данные:https://www.dropbox.com/s/2z0branzp7r26gl/highlighting dates.R?dl=0

 glimpse(ws_may_sep_plot)
Observations: 2,209
Variables: 8
Groups: rh, precipitation, temperature, par [2,203]
$ date_time <dttm> 2012-05-15 00:00:00, 2012-05-15 01:00:00, 2012-05-15 02:00:00, 2012-05-15 03:00:00, 201...
$ temperature <dbl> 3.1, 2.3, 3.3, 4.1, 5.1, 7.1, 8.1, 7.7, 8.0, 9.5, 11.0, 10.7, 9.9, 9.6, 9.6, 10.1, 9.9, ...
  

Когда я запускаю свой код, я получаю следующую ошибку:

Недопустимый ввод: time_trans работает только с объектами класса POSIXct

Комментарии:

1. Используйте as.POSIXct вместо as.Date и посмотрите, имеет ли это значение.

Ответ №1:

Используйте scale_x_date("2 week") вместо scale_x_datetime . Ваши даты — это только даты, а не datetimes (компонент времени с датой).

 
df <- data.frame(date = seq.Date(as.Date("2012-01-01"), as.Date("2012-07-01"), by = "day"),
                 temperature = rnorm(183, 30, 1))

p <- ggplot(df, aes (x = date, y = temperature))  
  geom_point(size=0.5)  
  #scale_x_datetime(breaks = "2 week")
ggtitle("Ambient temperature")

may_start <- "2012-05-22"
may_start_iso <- as.Date(may_start)

may_end <- "2012-05-23"
may_end_iso <- as.Date(may_start)

rect <- data.frame(xmin= may_start_iso, xmax= may_end_iso, ymin=-Inf, 
                   ymax=Inf)

p   geom_rect(data=rect, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
              color="grey20",
              alpha=0.5,
              inherit.aes = FALSE) 
  scale_x_date(breaks = "2 week") # Should work!

  

Комментарии:

1. Привет, на самом деле мои даты — это datetimes… В любом случае, большое вам спасибо, что нашли время, чтобы попытаться решить мою проблему!