У меня есть график с датами на оси X, и я хочу добавить штриховку, чтобы различать выходные и праздничные дни.Я подумал, что могу сделать это с помощью POSIXct.Я определяю функцию, чтобы выяснить, является ли день выходным:
weekend<-function(data) {
d<-weekdays(data)
ifelse (d %in% c("niedziela","sobota", "Sunday", "Sun", "Saturday", "Sat"), "weekend", "working")
}
Затем я определяю свои наборы данных - фактический набор данных и таблицу выходных:
dates=as.character(seq(as.Date("2018-10-24"), as.Date("2018-11-01"), "day"))
numbers=rnorm(length(dates))
tabela=data.table(dates=as.POSIXct(dates), numbers=numbers)
tabela[,day_type:=weekend(dates)]
tab_weekend<-tabela[day_type=='weekend']
tab_weekend[,Start:=dates-12*60*60+1]
tab_weekend[,Stop:=dates+12*60*60]
Затем я строю графикчисла в виде строки, а выходные - в виде серых прямоугольников.
g<-ggplot(tabela)+
geom_line(aes(dates, numbers))+
geom_rect(data=tab_weekend, aes(xmin=Start, xmax=Stop, ymin=-Inf, ymax=+Inf),
fill='gray65', alpha=0.2)+
scale_x_datetime(labels=function(x) format(x, "%Y-%m-%d %H:%M"))
Пока все хорошо:
Но если ятеперь используйте больший диапазон дат,
dates=as.character(seq(as.Date("2018-10-01"), as.Date("2018-11-01"), "day"))
Я получаю тики каждую неделю, что само по себе не является проблемой, но теперь последний тик показывает неправильную дату.По пункту 29.10.(Понедельник) это говорит 28.10.23:00.
Я предполагаю, что это происходит потому, что 28.10.это первый день зимнего времени, поэтому у него 25 часов.Но как мне исправить, чтобы отображались правильные даты?
РЕДАКТИРОВАТЬ: было предложено использовать date_format с аргументом tz, как в R: as.POSIXct timezone и scale_x_datetime в моем наборе данных .Однако, с
scale_x_datetime(labels=date_format("%Y-%m-%d", tz = "Europe/Berlin"))
я все еще вижу тики для 10-15, 10-22 и затем 10-28.