使用 ggTimeSeries 包构建日历图
点击下方公众号,回复资料分享,收获惊喜
简介
最近和师妹参加一个数据分析大赛,比赛中需要对产品的每天失效数进行可视化。这时,我想起了 GitHub 中的热力图,如下所示:
于是,我打算使用这种热力图/日历图来绘制我的需求。经过搜索,发现了几篇值得参考的文章:
Time-Series Calendar Heatmaps[1]
ggTimeSeries 的 Github 教程[2]
《R语言数据可视化之美专业图表绘制指南[3]》第六章
以下为他们所构造出的结果:
和我想象的 GitHub 的不大相同。个人需求是将产品失效个数按照离散形式(极少,少,中,多,极多)划分。并且图形应当更加简洁美观。
于是在学习 {ggTimeSeries
} 包后,我打算在他们基础上进行修改。
数据介绍
我们使用模拟数据进行分析,一共生成两列数据:日期以及对应的产品失效等级(a:e)。为了突出产品失效是极少的,所以在抽样(sample()
)过程中,给 a 类增加抽到的概率。
注意:此类需求还可拓展到其他时间序列中,例如:图书馆书籍日均借阅次数/等级;AQI日均级别等。
# 构建数据
library(tidyverse)
set.seed(20230309)
dtData <- tibble(
DateCol = seq(
as.Date("1/01/2020", "%d/%m/%Y"),
as.Date("31/12/2022", "%d/%m/%Y"), "days"
),
ValueCol = sample(
c('a', 'b', 'c', 'd', 'e'),
1096, #根据日期长度确定
prob = c(0.7, 0.1, 0.1, 0.05, 0.05),
replace = TRUE
)
)
head(dtData)
可视化
加载所需的 R 包
library(ggTimeSeries)
library(ggplot2)
初级版本
利用 {ggTimeSeries
} 包中的 ggplot_calendar_heatmap()
绘制基于年份的日历图。
p = ggplot_calendar_heatmap(
dtData,
'DateCol',
'ValueCol'
)
p
此时,默认情况下,图形非常丑陋。
细节调整
根据上图存在的问题,我们做一些细节调整,例如:
变化分面位置; 改变日历中边缘粗细和颜色; 修改主题和配色等。
由于这里是离散数据,并且想要复现 GitHub 那种款式。
所以小编使用颜色采集器获取对应颜色代码,并使用 scale_fill_manual()
进行赋值。其他细节如下所示,不做过多说明。读者可以删除对应内容,查看绘图结果,从而判断该参数的功能。
col <- c("#EBEDF0", "#CBE491", "#89C876", "#459944", "#2C602C")
p +
scale_fill_manual(values = col) +
facet_wrap(~Year, ncol = 1,strip.position = "right") +
theme( panel.background = element_blank(),
legend.text = element_blank(),
panel.border = element_rect(colour="grey60",fill=NA),
strip.background = element_blank(),
strip.text = element_text(size=13,face="plain",color="black"),
axis.line=element_line(colour="black",size=0.25),
axis.title=element_text(size=10,face="plain",color="black"),
axis.text = element_text(size=10,face="plain",color="black")) +
xlab('') +
ylab('') +
labs(fill = "Freq")
小编有话说
注意:本文的代码(.RMD)已经放到我的 GitHub 中(文末原文直达),有兴趣读者可以下载。此外,往期部分推文代码都已经公开,欢迎大家 Fork,star 使用。
参考资料
[1]Time-Series Calendar Heatmaps: http://www.columbia.edu/~sg3637/blog/Time_Series_Heatmaps.html
[2]ggTimeSeries 的 Github 教程: https://exts.ggplot2.tidyverse.org/ggTimeSeries.html
[3]R语言数据可视化之美专业图表绘制指南: https://github.com/EasyChart/Beautiful-Visualization-with-R
推荐: 可以保存以下照片,在b站扫该二维码,或者b站搜索【庄闪闪】观看Rmarkdown系列的视频教程。Rmarkdown视频新增两节视频(写轮眼幻灯片制作)需要视频内的文档,可在公众号回复【rmarkdown】
R沟通|Rmarkdown教程(4)
R沟通|Rmarkdown教程(3)
R沟通|Rmarkdown教程(2)