Добавление меток к оси вручную в переменной с отложенной датой

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

ОСТАВИЛПРАВО

Делать типичный

P1 + scale_x_continuous(breaks = c(startDate, endDate), labels= c("startDate", "endDate"))

не работает Я могу преобразовать данные $x, но тогда я потеряю метки даты.

Есть ли что-то, что я могу добавить к P1 чтобы добавить метки (в идеале без необходимости изменения кода для создания P1)

Бонусные баллы: возможно ли выбить только один ярлык из месяцев, которые будут совпадать с другими ярлыками?

Пример данных и код:

library(ggplot2)

set.seed(1)
dat <- data.frame(date=1:200 + 15e3, value=rep(1:20, each=10) + (rnorm(200, 0, .5)))

startDate <-  dat$date[[30]]
endDate   <-  dat$date[[42]]

P1 <- ggplot(data=dat, aes(x=as.Date(date, origin="1970-01-01"), y=value)) + geom_line() +
        geom_vline(xintercept=c(startDate, endDate), color="blue") +
        xlab("Date")

P2 <- ggplot(data=dat, aes(x=date, y=value)) + geom_line(alpha=0) +
        geom_vline(xintercept=c(startDate, endDate), color="blue") +
        scale_x_continuous(breaks = c(startDate, endDate)
                         , labels= c("startDate", "endDate")) +
        theme(axis.text.x =element_text(angle=45) )

1 ответ

Одним из способов было бы установить вручную все разрывы и метки. Для этого вам нужно знать диапазон значений даты, а затем установить позиции перерывов (я установил их как первый день месяца). А для меток также добавляются имена вручную (включая startDate и endDate).

ggplot(data=dat, aes(x=as.Date(date, origin="1970-01-01"), y=value)) + geom_line() +
  geom_vline(xintercept=c(startDate, endDate), color="blue") +
  scale_x_date("Date",
   breaks = c(seq(from=as.Date("2011-02-01"),to=as.Date("2011-08-01"),by="month"),
                      as.Date(c(startDate, endDate),origin="1970-01-01")),
   labels= c("Feb" ,"Mar" ,"Apr", "May", "Jun" ,"Jul" ,"Aug","startDate", "endDate")) +
  theme(axis.text.x =element_text(angle=45))

Поскольку даты начала и окончания близки к Mar ярлык, вы можете установить его пустым ("") но сетка на эту дату останется как breaks= не изменены.

ggplot(data=dat, aes(x=as.Date(date, origin="1970-01-01"), y=value)) + geom_line() +
  geom_vline(xintercept=c(startDate, endDate), color="blue") +
  scale_x_date("Date",
   breaks = c(seq(from=as.Date("2011-02-01"),to=as.Date("2011-08-01"),by="month"),
                      as.Date(c(startDate, endDate),origin="1970-01-01")),
   labels= c("Feb" ,"" ,"Apr", "May", "Jun" ,"Jul" ,"Aug","startDate", "endDate")) +
  theme(axis.text.x =element_text(angle=45))

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

Другие вопросы по тегам