Установка ограничений по оси x с помощью scale_x_date в ggplot, отсутствующие границы

#r #ggplot2

Вопрос:

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

Пример ниже

 df = data.frame(
  date = as.Date(c("2021-10-10","2021-10-11","2021-10-12","2021-10-13",
           "2021-10-14","2021-10-15","2021-10-16",
           "2021-10-17","2021-10-18","2021-10-19")),
  count = c(1,2,3,4,1,2,2,1,2,3)
)

a = ggplot(df, aes(x=date, y=count))  
  geom_bar(stat="identity", colour="black", fill="steelblue")  
  scale_x_date(limits = c(df$date[5], df$date[10]))

a
 

Я пытаюсь отобразить данные с даты 5 по дату 10, но это отсекает данные для даты 5 и даты 10.

Как я должен установить ограничения, чтобы включить границы?

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

1. будет scale_x_date(limits = c(df$date[4], df$date[11])) ли работать? Или фильтрация данных перед построением графика?

Ответ №1:

То, что происходит с выходящими за рамки значениями в масштабе, определяется oob аргументом. Поскольку у вас есть столбцы, параметры которых задаются значениями xmin / xmax / ymin / ymax внутри, первый xmin и последний xmax выходят за ваши пределы (поэтому они считаются выходящими за рамки). Вы можете сохранить значения, выходящие за рамки scales::oob_keep() .

 library(ggplot2)

df = data.frame(
  date = as.Date(c("2021-10-10","2021-10-11","2021-10-12","2021-10-13",
                   "2021-10-14","2021-10-15","2021-10-16",
                   "2021-10-17","2021-10-18","2021-10-19")),
  count = c(1,2,3,4,1,2,2,1,2,3)
)

p <- ggplot(df, aes(x=date, y=count))  
  geom_col(colour="black", fill="steelblue")

p  
  scale_x_date(limits = c(df$date[5], df$date[10]),
               oob = scales::oob_keep)
 

Однако вы, скорее всего, захотите разместить первый и последний столбцы, расширив ограничения, включив в них значения xmin / xmax.

 p  
  scale_x_date(limits = c(df$date[5] - 0.5, df$date[10]   0.5))
#> Warning: Removed 4 rows containing missing values (position_stack).
 

Создано 2021-10-20 пакетом reprex (v2.0.1)

Ответ №2:

Быстрое исправление:

 a = ggplot(df, aes(x=date, y=count))  
     geom_bar(stat="identity", colour="black", fill="steelblue")  
     scale_x_date(limits = c(df$date[5]-1, df$date[10] 1))