Я сделал пакет , который делает это. Он называется bdscale
и находится на CRAN и github . Бесстыдная вилка.
Чтобы повторить ваш пример:
> library(bdscale)
> library(ggplot2)
> library(scales)
> dts <- as.Date( c('2011-01-10', '2011-01-11', '2011-01-15', '2011-01-16'))
> ggplot(df, aes(x=dt, y=val)) + geom_point() +
scale_x_bd(business.dates=dts, labels=date_format('%d%b'))
Но вам, вероятно, нужно загрузить известные действительные даты, а затем нанести на график ваши данные, используя действительные даты на оси x:
> nyse <- bdscale::yahoo('SPY') # get valid dates from SPY prices
> dts <- as.Date('2011-01-10') + 1:10
> df <- data.frame(dt=dts, val=seq_along(dts))
> ggplot(df, aes(x=dt, y=val)) + geom_point() +
scale_x_bd(business.dates=nyse, labels=date_format('%d%b'), max.major.breaks=10)
Warning message:
Removed 3 rows containing missing values (geom_point).
В предупреждении говорится, что удалены три даты:
- 15 = суббота
- 16-е = воскресенье
- 17 = День МЛК