Сохранить пустые таблицы в графике ggplot

#r #ggplot2

#r #ggplot2

Вопрос:

У меня есть df со списком дат, которые я хочу отобразить в виде столбчатой диаграммы по неделям года. Мне нужно, чтобы они отображались в виде годовой недели, например, 202034, и если на этой неделе их нет, на панели должен отображаться ноль.

Я могу построить это, используя только даты, и отображаются пробелы:

 library(tidyverse)
library(lubridate)
set.seed(93)
df<-data.frame(date=sample(seq(as.Date('2020-08-01'), as.Date('2020-09-30'), by="day"), 5,replace=TRUE))
df$yearweek<-paste0(year(df$date),isoweek(df$date))

ggplot(data = df)  
  geom_bar(
    mapping = aes(x=`date`))
 

введите описание изображения здесь

Если я попытаюсь построить это с использованием года и недели, то в течение любых недель, когда отсутствуют данные, столбиков там нет.
введите описание изображения здесь

Как я могу изменить код, чтобы он отображал пустые недели на гистограмме?

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

1. установите разрывы на вашей оси на недели, которые вы хотели бы показать. ?scale_x_datetime() для получения дополнительной информации

Ответ №1:

Что-то вроде этого? Отредактировал ответ, чтобы отразить комментарий.

 library(tidyverse)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union

set.seed(93)
df<-data.frame(date=sample(seq(as.Date('2020-08-01'), as.Date('2020-09-30'), by="day"), 5,replace=TRUE))
df$yearweek<-paste0(year(df$date),isoweek(df$date))

df <- df %>% 
  mutate(week_floor=lubridate::floor_date(date, unit = "week"))

ggplot(data = df)  
  geom_bar(
    mapping = aes(x=week_floor)) 
  scale_x_date(breaks=scales::date_breaks(width = "1 week"),
               labels=scales::date_format(format="%Y%U"))
 

Создан 2020-12-10 пакетом reprex (версия 0.3.0)

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

1. Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно, чтобы она была отформатирована определенным образом, например, неделя 202037 года, а не Sep-07

2. @Basil смотри выше. изменено форматирование меток оси x

3. Как я могу агрегировать итоги по неделям? На приведенном выше графике, несмотря на правильную маркировку, он по-прежнему отображается днем.

4. @Basil снова изменил код. Пожалуйста, смотрите выше.