# 来源 https://www.r2omics.cn/
library(tidyverse) # 用于数据处理和可视化
# 读取数据文件
= read.delim("https://www.r2omics.cn//res/demodata/calendar/data.txt") # 读取数据文件,假设数据以制表符分隔
df
# 数据处理:提取日期相关的信息,并对数据进行整理
= df %>%
dfPlot 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轴文本样式
R语言绘制日历热图
前言
本篇是R语言ggplot2包绘制日历热图的教程。
什么是日历热图?
日历热图是一种用于展示数据的可视化图表,它以日历的形式呈现一段时间内的数据分布情况,通常以颜色的深浅或不同的颜色代表不同的数据值或频率。日历热图能帮助用户快速识别时间序列数据中的模式、趋势和异常值,尤其是在日、周或月的粒度下进行数据展示时。
主要特点:
直观性:通过不同的颜色或色块填充日期,使得数据的高低一目了然。
时间维度:通常会以年份、月份和日期为单位,展示时间维度的连续数据。
应用场景:
网站分析:展示某网站每天的访问量或用户行为数据。
健康追踪:比如展示每天的步数、卡路里消耗等。
金融数据:比如展示股票的每日涨跌幅度等。
绘图所需数据
包含两列数据,第一列是年月日日期,第二列是数值。
demo数据可以在这里下载https://www.r2omics.cn//res/demodata/calendar/data.txt