# 来源 https://www.r2omics.cn/
library(tidyverse) # 用于数据处理和可视化
library(ggTimeSeries) # 提供时间序列相关的可视化函数
library(RColorBrewer) # 提供调色板
# 读取数据文件
df = read.delim("https://www.r2omics.cn//res/demodata/calendar/data2.txt") # 读取数据文件,假设数据以制表符分隔
# 数据处理:提取年份、月份和周数
df = df %>%
mutate(Year = as.integer(strftime(Date, '%Y'))) %>% # 提取年份
mutate(month = as.integer(strftime(Date, '%m'))) %>% # 提取月份
mutate(week = as.integer(strftime(Date, '%W'))) # 提取周数
# 计算每个月的平均周数,并生成月份标签
MonthLabels = df %>%
group_by(month) %>% # 按月份分组
summarise(meanWeek = mean(week)) %>% # 计算每个月的平均周数
mutate(month=month.abb[month]) %>% # 将月份数字转换为缩写(如Jan, Feb等)
data.frame() # 将结果转换为数据框
# 绘制日历热图
ggplot(data=df, aes(date=Date, fill=Value)) + # 设置日期和颜色填充映射
stat_calendar_heatmap() + # 绘制日历热图
scale_fill_gradientn(colours=rev(brewer.pal(11, 'Spectral')))+ # 设置渐变色填充
facet_wrap(~Year, ncol = 1, strip.position = "right") + # 按年份分面,纵向排列
scale_y_continuous(breaks=seq(7, 1, -1), labels=c("Mon","Tue","Wed","Thu","Fri","Sat","Sun")) + # 设置Y轴为星期天到星期一
scale_x_continuous(breaks = MonthLabels[,"meanWeek"], labels = MonthLabels[, "month"], expand = c(0, 0)) + # 设置X轴标签为每月的平均周数
labs(x="", y="") + # 去除X和Y轴标签
theme(panel.background = element_blank()) # 去除背景