#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))