Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R-ggTimeSeries | ggplot2: 热力日历图

R-ggTimeSeries | ggplot2: 热力日历图

作者头像
数据小磨坊
发布于 2020-09-10 08:52:32
发布于 2020-09-10 08:52:32
2.5K00
代码可运行
举报
文章被收录于专栏:数据小魔方数据小魔方
运行总次数:0
代码可运行

我们平常的日历也可以当作可视化工具,适用于显示不同时间段,以及活动事件的组织情况。时间段通常以不同单位显示,例如日、周、月和年。今天我们最常用的日历形式是公历,每个月份的月历由7个垂直列组成(代表每周7天),如图所示。

日历图的主要可视化形式有如图6-2-2所示的两种:以年为单位的日历图(见图6-2-2 (a))和以月为单位的日历图(见图6-2-2 (b))。日历图的数据结构一般为(Date,Value),将Value按照Date(日期)在日历上展示,其中Value映射到颜色。

1. ggTimeSeries绘图

R中ggTimeSeries 包[1]的ggplot_calendar_heatmap()函数可以绘制如图6-2-2(a)所示的日历图,但是不能设定日历图每个时间单元的边框格式。

使用stat_calendar_heatmap()函数和ggplot2包的ggplot()函数可以调整日历图每个时间单元的边框格式,具体代码如下所示。其关键是使用as.integer(strftime())日期型处理组合函数获取某天对应所在的年份、月份、周数等数据信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#setwd("D:/R/working_documents1")
library(ggplot2)
library(data.table) # 数据格式依赖
library(ggTimeSeries)
library(RColorBrewer)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 构造随机数据
set.seed(2134)
dat <- data.table(
  date = seq(as.Date("2016-01-01"), as.Date("2019-12-31"), "days"),
  ValueCol = runif(1461)
)

dat[, ValueCol := ValueCol + (strftime(date, "%u") %in% c(6,7)*runif(1)*0.75)
    ][, ValueCol := ValueCol + (abs(as.numeric(strftime(date, "%m")) - 6.5))*runif(1)*0.75
      ][, ':='(Year = as.integer(strftime(date, "%Y")), # add new column
               month = as.integer(strftime(date, "%m")),
               week = as.integer(strftime(date, "%W")))] # 添加列

MonthLabels <- dat[, list(meanWkofYr = mean(week)), by = c("month")
                   ][, month := month.abb[month]]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(data = dat, aes(date = date, fill = ValueCol)) + 
  stat_calendar_heatmap() + 
  scale_fill_gradientn(colours = rev(brewer.pal(11, "Spectral"))) + 
  scale_y_continuous(name = NULL,
                     breaks = seq(7, 1, -1), 
                     labels = c("Mon", "Tue", "Wed", 
                                "Thu", "Fri", "Sat", "Sun")) + 
  scale_x_continuous(name = NULL, 
                     breaks = MonthLabels$meanWkofYr, 
                     labels = MonthLabels$month, 
                     expand = c(0,0)) + 
  facet_wrap(~Year, ncol = 1, strip.position = "right") + 
  theme(panel.background = element_blank(),
        panel.border = element_blank(),
        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"))

2.geom_tile()

使用R中ggplot2包的geom_tile()函数,借助facet_wrap()函数分面,就可以绘制如图6-2-2(b)所示的以月为单位的日历图,具体代码如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
label_mons <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", 
                "Aug", "Sep", "Oct", "Nov", "Dec")
label_wik <- c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")

dat19 <- dat[Year == 2017, list(date, ValueCol, month, week)
             ][, ':='(weekday = as.integer(strftime(date, "%u")), # 周数
                      yearmonth = strftime(date, "%m%Y"),       # 月数
                      day = strftime(date, "%d"))              # 天数
               ][, ':='(monthf = factor(x = month, levels = as.character(1:12),
                                      labels = label_mons, ordered = TRUE),
                        weekdayf = factor(x = weekday, levels = 1:7, 
                                           labels = label_wik, ordered = TRUE),
                        yearmonthf = factor(x = yearmonth))
                 ][, ':='(monthweek = 1 + week - min(week)), by = .(monthf)] # 分组聚合
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
label_mons <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", 
                "Aug", "Sep", "Oct", "Nov", "Dec")
label_wik <- c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")

dat19 <- dat[Year == 2017, list(date, ValueCol, month, week)
             ][, ':='(weekday = as.integer(strftime(date, "%u")), # 周数
                      day = strftime(date, "%d"))              # 天数
               ][, ':='(monthf = factor(x = month, levels = as.character(1:12),
                                      labels = label_mons, ordered = TRUE),
                        weekdayf = factor(x = weekday, levels = 1:7, 
                                           labels = label_wik, ordered = TRUE))
                 ][, ':='(monthweek = 1 + week - min(week)), by = .(monthf)] # 分组聚合
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(dat19, aes(weekdayf, monthweek, fill = ValueCol)) + 
  geom_tile(color = "white") + 
  geom_text(aes(label = day), size = 3) + 
  scale_fill_gradientn(colours = rev(brewer.pal(11, "Spectral"))) + 
  facet_wrap(~monthf, nrow = 3) + 
  scale_y_reverse(name = "Week of the month") + 
  xlab("Day") +
  theme(strip.text = element_text(size = 11, face = "plain", color = "black"),
        panel.grid = element_blank())

感谢誉辉优化《R语言数据可视化之美》关于热力日历图的代码

参考:

[1] ggTimeSeries 包的参考网址:http://www.ggplot2-exts.org/ggTimeSeries.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大连市2016年空气质量数据可视化~
前几天发现了一个很有趣的包——openair,可以将年度时间序列刻画成周年日历热图,感觉这种形式非常适合用于呈现年度空气质量可视化,所以抓空爬了一些大连市2016年年度空气质量数据拿来玩玩,目标网站网页结构比较简单,爬取过程很轻松,界面部分很规律,感觉这个代码可以作为模板用,感兴趣的小伙伴儿可以试着玩一玩! library(RCurl) library(XML) library(dplyr) library(ggplot2) library(stringr) library(rvest) library(l
数据小磨坊
2018/04/11
7830
大连市2016年空气质量数据可视化~
ggHoriPlot--让你的图片“浪”起来!
用许多条目来表示和比较时间序列,将它们绘制为折线图可能具有挑战性。绘制此类数据集的一种更方便的方法是地平线图,它能够压缩数据但仍保留所有信息。
作图丫
2022/03/29
8010
ggHoriPlot--让你的图片“浪”起来!
高维数据 | R语言数据可视化之日历图
日历图,在环境与生态指标的动态监测中应用普遍,特别适用于显示不同时间段的指标情况。比如污染物中重金属含量、空气中PM2.5变化情况。在金融行业中检测股票收盘价、回测信号等指标中也很常见。生物医药领域的血糖或血压日记录值,新型冠状病毒的逐日确诊数量等等。通过时间分布的日历图动态监测数据,以弥补普通线图的不足。
黑妹的小屋
2020/08/06
2K0
🤑 ggplot2 | 世界杯赛程的可视化就交给我吧!~
1写在前面 昨天卡塔尔🇶🇦输了比赛真是让人大跌眼镜啊😱,打破了世界杯东道主必胜的神律,也不知道王子们是怎么想的。🤣 今天是英格兰🏴󠁧󠁢󠁥󠁮󠁧󠁿Vs伊朗🇮🇷,🐷各位好运!~😘 后面的赛事我们就用ggplot画一个赛程图吧😁, 效果图如下:👇 2用到的包 rm(list = ls()) library(tidyverse) library(tmcn) library(lubridate) library(RColorBrewer) 3示例数据 这里我事先在网上爬了赛程下来,这里就直接读入了。 dat <-
生信漫卷
2023/02/24
2980
🤑 ggplot2 | 世界杯赛程的可视化就交给我吧!~
跟着Nature Communications学作图:R语言ggplot2散点加误差线展示响应比(Response ratio)
https://www.nature.com/articles/s41467-020-16881-7#Sec15
用户7010445
2023/01/06
8000
跟着Nature Communications学作图:R语言ggplot2散点加误差线展示响应比(Response ratio)
跟着Global Change Biology学作图:R语言ggplot2点线图(1)
本地pdf Global Change Biology - 2022 - Feng - Changes in plant inputs alter soil carbon and microbial communities in forest.pdf
用户7010445
2023/01/06
6080
跟着Global Change Biology学作图:R语言ggplot2点线图(1)
ggplot2优雅的拆分堆砌条形图
❝本节来介绍如何「对堆砌条形图来进行图形拆分」; 加载R包 library(tidyverse) library(patchwork) 定义主题 theme_niwot <- function(){ theme_minimal()+ theme(axis.text = element_text(color = "black",size = 6), strip.text = element_text(color = "black",hjust = 0,
R语言数据分析指南
2022/09/21
5530
ggplot2优雅的拆分堆砌条形图
scRNA分析| Seurat堆叠小提琴图不满足? 那就ggplot2 堆叠 各种元素
单细胞常见的可视化方式有DimPlot,FeaturePlot ,DotPlot ,VlnPlot 和 DoHeatmap几种 ,Seurat均可以实现,但文献中的图大多会精美很多。比如
生信补给站
2023/08/25
4.8K0
scRNA分析| Seurat堆叠小提琴图不满足?  那就ggplot2 堆叠 各种元素
ggplot做蝴蝶图
蝴蝶图是一种形似蝴蝶双向柱状图。做GO term 的时候常常同时展现上调和下调的数据,因此,这里用ggplot2绘制GO term双向柱状图。 输入数据为clusterProfiler的GO term 结果,其他方式做的go term 也可,这里只用到通路和Pvalue。
生信编程日常
2020/05/08
1.2K0
跟着Nature学作图:R语言ggplot2箱线图/堆积柱形图完整示例
https://www.nature.com/articles/s41586-022-04808-9#MOESM8
用户7010445
2023/01/06
1.8K0
跟着Nature学作图:R语言ggplot2箱线图/堆积柱形图完整示例
跟着Nature Genetics学作图:R语言ggplot2曼哈顿图完整示例
https://www.nature.com/articles/s41588-022-01051-w
用户7010445
2023/01/06
1.1K0
跟着Nature Genetics学作图:R语言ggplot2曼哈顿图完整示例
跟着Nature Ecology&Evolution学作图:R语言ggplot2世界地图/柱形图/组合图
https://www.nature.com/articles/s41559-023-02235-1
用户7010445
2023/11/30
1.2K0
跟着Nature Ecology&Evolution学作图:R语言ggplot2世界地图/柱形图/组合图
ggplot2优雅的绘制配对连线云雨图
❝本节来介绍如何使用ggplot2绘制配对连线云雨图,图形倒也简单主要是细节;小编给了两个案例来进行展示,有循环绘图需求的可以看最后一个案例;❞ 加载R包 library(tidyverse) library(ggsignif) library(gghalves) library(ggsci) 数据清洗 df <- read_tsv("data.xls") %>% filter(year %in% c(1957,2007),continent !="Oceania") %>% select(
R语言数据分析指南
2022/12/20
9720
ggplot2优雅的绘制配对连线云雨图
Matplotlib时间序列型图表(1)
在前几篇文章中,我们介绍了数据分布型图表的几种绘制方法,如下图所示(滑动以浏览),对以往的工作做个总结。目的就是简化大家代码的书写过程,拓宽绘图方法,为科研和商业绘图提供帮助。
python数据可视化之路
2023/02/23
2.4K0
Matplotlib时间序列型图表(1)
ggplot2分面图形自定义添加回归曲线R值
❝本节来介绍如何自定义给分面图形添加R值与P值,通过两个案例来进行展示❞ 加载R包 library(tidyverse) library(gapminder) library(ggpmisc) library(ggsci) library(grid) 导入数据 df <- read_tsv("data.xls") %>% filter(!continent %in% c("Oceania","Americas"),year >=1982) 数据可视化 ❝在这个案例中我们介绍使用「stat_quant_e
R语言数据分析指南
2022/12/20
1K0
ggplot2分面图形自定义添加回归曲线R值
ggplot2基础哑铃图叠加新元素
R语言数据分析指南
2024/01/17
1260
ggplot2基础哑铃图叠加新元素
跟着Nature学作图:R语言ggplot2柱形图添加误差线和频率分布直方图
https://www.nature.com/articles/s41586-022-05275-y
用户7010445
2023/01/06
1.1K0
跟着Nature学作图:R语言ggplot2柱形图添加误差线和频率分布直方图
跟着Nature学作图:R语言ggplot2簇状柱形图完整示例
https://www.nature.com/articles/s41586-022-04664-7#Sec33
用户7010445
2023/01/06
9400
跟着Nature学作图:R语言ggplot2簇状柱形图完整示例
全网最全的R语言基础图形合集
直方图是一种对数据分布情况进行可视化的图形,它是二维统计图表,对应两个坐标分别是统计样本以及该样本对应的某个属性如频率等度量。
生信学习者
2024/06/12
1130
全网最全的R语言基础图形合集
跟着ISEM学作图:R语言ggtree+ggplot2组合进化树和气泡图
论文 Conserved and reproducible bacterial communities associate with extraradical hyphae of arbuscular mycorrhizal fungi image.png 今天的推文我们来重复一下论文中的 Figure 2 image.png 没有找到论文提供的原始数据,这里数据我自己构造一份 首先是左侧的进化树文件 (((A8:0.9735669859,((A5:0.7219205995,A9:0.53850
用户7010445
2022/05/23
1.4K0
跟着ISEM学作图:R语言ggtree+ggplot2组合进化树和气泡图
推荐阅读
相关推荐
大连市2016年空气质量数据可视化~
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验