我开始在 Excel 中制作日历,但认为用 R 代替它可能很容易。(注意:我知道各种热图日历包,但我更喜欢使用ggplot2
。)最终我想制作一个显示从给定日期开始的 12 个月的日历,每个月作为一个小框显示 4 或 5 周y 轴(第 1 周在顶部,第 4 周或第 5 周在底部)和沿 x 轴的一周中的天数(从星期一开始)。
我认为这将是一个 15 分钟的工作(创建所有月份的数据,使用reshape
然后使用格式化一点facet_wrap
)但几乎立即遇到了问题,如下图所示 - 虽然月份的日子不按顺序排列,但这周似乎还可以。在 R 中排序数据是我的克星;我真的应该解决这个问题。无论如何,下面的图片显示了我到目前为止所拥有的,代码在下面。这只是一个有趣的项目,并不紧急,但欢迎任何帮助和/或修饰。
require(ggplot2)
require(scales)
require(lubridate)
date.start <- as.Date('2013-09-01')
date.end <- date.start + months(1)
mydf <- data.frame(mydate = seq(as.Date(date.start),
as.Date(date.end) - days(1),
by = 'day'))
mydf$month <- month(mydf$mydate)
mydf$week <- week(mydf$mydate)
mydf$day <- day(mydf$mydate)
mydf$dow <- as.factor(format(mydf$mydate, format = "%a"))
levels(mydf$dow) <- c('Mon','Tue','Wed','Thu','Fri','Sat','Sun')
ggplot(mydf, aes(x = dow, y = as.factor(week))) +
geom_tile(colour = "black", fill = "white", label = mydf$day) +
geom_text(label = mydf$day, size = 4, colour = "black") +
scale_x_discrete(expand = c(0,0)) +
theme(axis.ticks = element_blank()) +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(panel.background = element_rect(fill = "transparent"))+
theme(legend.position = "none") +
theme()