Подтвердить что ты не робот

Установить диапазон дат в ggplot

мой кадр данных равен z:

> dput(z)
structure(list(Month = structure(c(14975, 15095, 15156, 15187, 
15248), class = "Date"), Value = c(1, 1, 1, 6, 1)), .Names = c("Month", 
"Value"), row.names = c(NA, 5L), class = "data.frame")


ggplot(z, aes(Month, Value)) + 
    geom_bar(fill="orange",size=.3,  stat="identity", position="identity") +
    geom_smooth(data=z,aes(Month,Value,group=1), method="lm", size=2, color="navyblue") + 
    scale_x_date(breaks = "1 month", labels=date_format("%b-%Y"))

Это работает нормально, но мне очень нравится мой диапазон данных между 1/1/2011 и 1/1/2013. Мой примерный пример - с 1/12011 по 10/1/2011. Есть ли простой способ заставить диапазон дат от 1/1/2011 до 1/1/2013 в ggplot?

4b9b3361

Ответ 1

В документации в ?scale_x_date упоминается, что он принимает все "типичные" непрерывные масштабные аргументы, включая limits:

library(scales)
ggplot(z, aes(Month, Value)) + 
    geom_bar(fill="orange",size=.3,  stat="identity", position="identity") + 
    geom_smooth(data=z,aes(Month,Value,group=1), method="lm", size=2, color="navyblue") + 
    scale_x_date(date_breaks = "1 month", 
                 labels=date_format("%b-%Y"),
                 limits = as.Date(c('2011-01-01','2013-01-01')))

Ответ 2

Было бы любезно для пользователей SO отметить, что вы помимо "ggplot2" также загрузили пакет scales. Существует функция ggplot2::xlim, поэтому это работает:

  ...... + xlim(as.Date(c('1/1/2011', '1/1/2013'), format="%d/%m/%Y") )

Обновление: только что получил нисходящее движение по необъяснимой причине. Код в исходном вопросе больше не работает, но если вы замените вызов scale_x_date (.) Только с вызовом xlim() выше, ошибки не будет.

ggplot(z, aes(Month, Value)) + 
     geom_bar(fill="orange",size=.3,  stat="identity", position="identity") +
     geom_smooth(data=z,aes(Month,Value,group=1), method="lm", size=2, color="navyblue") + 
     xlim(as.Date(c('1/1/2011', '1/1/2013'), format="%d/%m/%Y") )

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

Ответ 3

Вот решение, использующее ggplot 3.1, которое требует наименьших настроек исходного кода:

ggplot(z, aes(Month, Value)) + 
    geom_bar(fill="orange",size=.3, stat="identity", position="identity") +
    geom_smooth(data=z,aes(Month,Value,group=1), method="lm", size=2, color="navyblue") + 
    scale_x_date(date_breaks = "1 month", 
           limits = as.Date(c('1/1/2011', '1/1/2013'), format="%d/%m/%Y"),
           date_labels="%b-%Y" ) +
    theme(axis.text.x = element_text(angle = 90))

theme() в конце необязательна, но делает форматирование легче для чтения, если вы хотите использовать исходную строку форматирования "%b-%Y".