使用 ggTimeSeries 包构建日历图

简介: 使用 ggTimeSeries 包构建日历图

简介

最近和师妹参加一个数据分析大赛,比赛中需要对产品的每天失效数进行可视化。这时,我想起了 GitHub 中的热力图,如下所示:


于是,我打算使用这种热力图/日历图来绘制我的需求。经过搜索,发现了几篇值得参考的文章:

  1. Time-Series Calendar Heatmaps[1]
  2. ggTimeSeries 的 Github 教程[2]
  3. R语言数据可视化之美专业图表绘制指南[3]》第六章

以下为他们所构造出的结果:



来源 1



来源 2



来源 3 中 192 页

和我想象的 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


此时,默认情况下,图形非常丑陋。



细节调整

根据上图存在的问题,我们做一些细节调整,例如:

  1. 变化分面位置;
  2. 改变日历中边缘粗细和颜色;
  3. 修改主题和配色等。

由于这里是离散数据,并且想要复现 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

目录
相关文章
成功解决OSError: Unable to open file (truncated file: eof = 8388608, sblock->base_addr = 0, stored_eof =
成功解决OSError: Unable to open file (truncated file: eof = 8388608, sblock->base_addr = 0, stored_eof =
成功解决OSError: Unable to open file (truncated file: eof = 8388608, sblock->base_addr = 0, stored_eof =
|
12月前
|
算法
基于改进自适应分段线性近似(IAPLA)的微分方程数值解法研究: 从简单动力系统到混沌系统的应用分析
IAPLA方法为复杂动力系统的数值模拟提供了一个灵活、高效且易于实现的框架,在众多实际应用中可以作为现有数值求解器的有效替代方案。
147 2
基于改进自适应分段线性近似(IAPLA)的微分方程数值解法研究: 从简单动力系统到混沌系统的应用分析
|
12月前
|
数据采集 存储 自然语言处理
基于Qwen2.5的大规模ESG数据解析与趋势分析多Agent系统设计
2022年中国上市企业ESG报告数据集,涵盖制造、能源、金融、科技等行业,通过Qwen2.5大模型实现报告自动收集、解析、清洗及可视化生成,支持单/多Agent场景,大幅提升ESG数据分析效率与自动化水平。
647 0
|
KVM 虚拟化
KVM的热添加技术之CPU
这篇文章介绍了如何在KVM虚拟机中热添加CPU资源,包括查看当前CPU配置、修改CPU核心数、永久性修改CPU配置以及注意事项等操作步骤。
372 1
KVM的热添加技术之CPU
|
安全 物联网 数据安全/隐私保护
UEFI的一点点概识
UEFI的一点点概识
957 0
|
Linux 开发工具 git
pip的常用命令和常见问题的解决
当使用pip命令安装Python包时,有时候可以通过使用镜像地址来加速下载速度或解决访问限制的问题。以下是一些常用的pip命令和常见的镜像地址:
1528 3
R语言分布滞后非线性模型(DLNM)空气污染研究温度对死亡率影响建模应用
R语言分布滞后非线性模型(DLNM)空气污染研究温度对死亡率影响建模应用
|
Ubuntu
Ubuntu20.04安装SNMP服务
至此,你已经成功在Ubuntu 20.04上安装了SNMP服务。你可以使用SNMP工具来监视和管理你的系统,或者将其集成到网络管理系统中。
1028 3
|
人工智能 搜索推荐 vr&ar
安卓系统的发展历程与未来趋势
【2月更文挑战第10天】 安卓系统作为全球手机操作系统市场的领导者,其发展历程和未来趋势备受关注。本文将从安卓系统的起源、发展历程、技术特点以及未来发展趋势等方面进行探讨,分析安卓系统在移动设备领域的影响力以及未来可能的发展方向。
|
C++
【SPSS】两独立样本的曼-惠特尼U检验详细操作教程(附案例实战)
【SPSS】两独立样本的曼-惠特尼U检验详细操作教程(附案例实战)
2972 0