r - 在几何区域中显示缺失日期的间隙
问题描述
我喜欢绘制数据的时间序列。但是,日期值存在一些差距,如下例所示。以下代码生成不考虑缺失日期的图。如何显示缺失的日期,即显示 2021-01-02 和 2021-01-04 以及类似的 2021-01-06 和 2021-01-08 之间的差距。
library(tidyverse)
fake.data <- data.frame(
varA = c(0.6,0.5,0.2,0.3,0.7),
varB = c(0.1,0.2,0.4,0.6,0.2),
varC = c(0.3,0.3,0.4,0.1,0.1),
start_date = as.Date(c('2021-01-01','2021-01-02','2021-01-04','2021-01-06','2021-01-08')),
stringsAsFactors = FALSE
)
fake.data %>%
gather(variable, value,varA:varC) %>%
ggplot(aes(x = start_date, y = value, fill = variable)) +
geom_area()
解决方案
我想最简单的方法是伪造间隙,例如使用 geom_rect。
考虑到“数据间隙”实际上是大多数使用线/面积图所固有的 - 一些纯粹主义者实际上可能完全反对为非连续测量显示线/面积,因为它建议连续测量。因此,因为无论如何它都是插值的,您可能会争辩说您可能不需要显示这些差距。
library(tidyverse)
fake.data <- data.frame(
varA = c(0.6,0.5,0.2,0.3,0.7),
varB = c(0.1,0.2,0.4,0.6,0.2),
varC = c(0.3,0.3,0.4,0.1,0.1),
start_date = as.Date(c('2021-01-01','2021-01-02','2021-01-04','2021-01-06','2021-01-08'))
) %>% pivot_longer(cols = matches("^var"), names_to = "variable", values_to = "value" )
ls_data <- setNames(fake.data %>%
complete(start_date = full_seq(start_date, 1)) %>%
split(., is.na(.$variable)), c("vals", "missing"))
ggplot(ls_data$vals, aes(x = start_date, y = value, fill = variable)) +
geom_area() +
geom_rect(data = ls_data$missing, aes(xmin = start_date-.5, xmax = start_date+.5,
ymin = 0, ymax = Inf), fill = "white") +
theme_classic()
由reprex 包于 2021-04-21 创建 (v2.0.0 )
考虑到上述情况 - 我可能倾向于不明确显示差距,而是更明确地显示测量结果。例如,使用 geom_point。
fake.data %>%
ggplot(aes(x = start_date, y = value, fill = variable)) +
geom_area() +
geom_point(position = "stack") +
geom_line(position = "stack")
推荐阅读
- sqlite - 寻求改进此数据库设计
- c# - 在错误列表 C# vsix 扩展中显示自定义消息
- spree - 视图中如何提供'current_spree_user',而它不是实例变量
- javascript - 覆盖电子通知弹出窗口
- python - 每次运行代码时,如何将输入从 python 传输到 excel 中增加的行
- python - 通过kivy中的按钮增加变量的值
- azure-data-factory-2 - ADF 数据流空列
- javascript - 如何使用兄弟姐妹替代方法获得 jquery 效果?
- python-3.x - Python3 语音转文本
- sql - SQL:状态在 1 和 2 之间翻转;选择所有状态,自上次为 1 以来为 2