# 来源 https://www.r2omics.cn/
library(tidyverse) # 用于数据处理和可视化
# 读取数据文件
df = read.delim("https://www.r2omics.cn//res/demodata/calendar/data.txt") # 读取数据文件,假设数据以制表符分隔
# 数据处理:提取日期相关的信息,并对数据进行整理
dfPlot = df %>%
mutate(month = as.integer(strftime(Date, '%m'))) %>% # 提取月份
mutate(monthf = factor(month, levels=as.character(1:12), # 将月份转换为有序因子(1月到12月)
labels=month.abb, ordered=TRUE)) %>% # 月份缩写(如Jan, Feb等)
mutate(week = as.integer(strftime(Date, '%W'))) %>% # 提取周数
mutate(weekday = as.integer(strftime(Date, '%u'))) %>% # 提取星期几(1=星期一,7=星期日)
mutate(weekdayf = factor(weekday, levels=(1:7), # 将星期几转换为有序因子
labels=(c("Mon","Tue","Wed","Thu","Fri","Sat","Sun")), ordered=TRUE)) %>% # 星期几缩写
mutate(day = strftime(Date, "%d")) %>% # 提取日
group_by(monthf) %>% # 按月份分组
mutate(monthweek=1+week-min(week)) %>% # 计算每个月的周数,周数从1开始
ungroup() # 解除分组
# 绘制日历热图
ggplot(dfPlot, aes(weekdayf, monthweek, fill=Value)) + # 设置星期几和月份周数为x、y轴,值填充颜色
geom_tile(colour = "white") + # 使用矩形格子绘制热图
scale_fill_gradientn(colours= c("#e5eabf","#d6e685","#8cc665","#44a340","#1e6823"), # 设置颜色渐变
na.value = "#eeeeee") + # 设置缺失值的颜色
geom_text(aes(label=day), size=2) + # 在热图格子中添加日期
facet_wrap(~monthf ,nrow=3) + # 按月份分面,分为3行
scale_y_reverse() + # 翻转y轴,使得周一位于顶部
labs(x="", y="") + # 去除x、y轴标签
theme_void() + # 移除所有背景元素
theme(strip.text = element_text(size=13, face="plain", color="black"), # 设置月份标签样式
axis.text.x = element_text(size=10, face="plain", color="black")) # 设置x轴文本样式