r - 如何将不同长度的时间序列围绕 ggplot 图形中的特定点居中

标签 r ggplot2 dplyr time-series data-visualization

考虑此处创建的数据:

set.seed(123)
data <- data.frame(time = c(1:1000, 1:1030, 1:2000), ID = rep(c('a','b','c'), c(1000,1030,2000)), variable = rnorm (4030))

我们测量了 3 个个体一生中的一些过程变量,每个变量都用唯一的 ID 表示。假设时间是每个个体大小的函数,因此每个ID具有不同的长度。我们注意到每个时间序列中的某些模式或属性对于每个 ID 都是一致的,这意味着它发生在所有时间序列中(即在每个 ID 中的某个点)的一生),但他们处于不同的时间。 假设对于个体a来说,这种情况发生在time == 500,对于个体b来说,这种情况发生在time == 560,对于单个ctime == 602

我们可以创建一个典型的线图来显示每个时间序列,如下所示:

library(tidyverse)
data%>%
  ggplot(aes(time,variable, color = ID))+
  geom_point()+
  geom_line()

但是我们如何才能将每个时间序列集中在这些“公共(public)数据点”上,以显示每个 ID 中的“模式”有多相似?换句话说,在图中,ID == c 将首先开始,因为它最长,并且 c 的数据点 602 将显示在与ID == a 为数据点 500,ID == b 为数据点 560。

最佳答案

你不能这样做吗:

data$event_time <- rep(c(500, 560, 602), c(1000, 1030, 2000))

data %>%
  ggplot(aes(time - event_time, variable, color = ID)) +
  geom_point() +
  geom_line() +
  geom_vline(xintercept = 0, linetype = 2) +
  labs(x = "Time since life event")

enter image description here

关于r - 如何将不同长度的时间序列围绕 ggplot 图形中的特定点居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64560756/

相关文章:

r - 如何使用ggplot2绘制NA间隙

r - 我如何摆脱 arrangeGrob 中的随机背景网格

r - 在 dplyr mutate 中对具有特定模式的变量求和

r - 使用对应 ID 名称的 3 个阈值条件对数据帧进行子集化

r - 标准评估为 `dplyr::count()`

r - 如何对组中的每个元素做某事

r - R 中是否有一种有效的方法将矩阵 M2 的每一行 "paste"到矩阵 M1 的每一行以获得所有可能的组合?

r - 过滤具有正值和适当负值的行

r - ggplot2:如何为facet_wrap中的每个方面单独设置轴中断?

r - 是否可以创建插图?