r - ggplot多个时间不等的时间序列

标签 r ggplot2 time-series

我知道有一些与时间序列和多个数据帧相关的已回答问题,但我似乎无法弄清楚这一点。

我想绘制 4 个不同压力传感器与时间的时间戳数据(pa 列)。我有来自同一实验的 4 个带时间戳的压力读数。然而,由于传感器故障和数据中的其他信号,传感器收集数据的时间不相等,并且列的长度也不相等。

这两方面使我无法成功创建包含所有 4 个传感器数据的图表。所有 df 的观测数量不等,但在同一范围内,但在秒级别上有所不同。例如,时间分辨率是否需要更改为小时?

这就是 df 的样子:PA_1 n=1097361

      time               pa       wifi
1 2014-09-01 16:21:00   100.620    1   
2 2014-09-01 17:20:33   100.572    1 
3 2014-09-01 18:20:05   100.561    0
4 2014-09-01 19:19:38   100.523    0
5 2014-09-01 20:19:11   100.511    1    
6 2014-09-01 21:18:43   100.534    1

PA_2: n=914364
       time              pa        wifi
1 2014-09-01 15:25:05   NA         1 
2 2014-09-01 15:25:09   100.798    1
3 2014-09-01 15:25:11   100.792    0              
4 2014-09-01 15:25:15   100.791    0              
5 2014-09-01 15:25:18   100.790    1             
6 2014-09-01 15:25:20   100.791    1  

PA_3 n=963527
       time              pa        wifi
1 2014-09-01 15:25:02   100.832    1
2 2014-09-01 15:25:05   100.832    1
3 2014-09-01 15:25:08   100.825    0
4 2014-09-01 15:25:11   100.831    0
5 2014-09-01 15:25:14   100.830    1
6 2014-09-01 15:25:17   100.836    1   

PA_4: n = 1061117
       time              pa        wifi
1 2014-09-01 15:25:00   100.690    1
2 2014-09-01 15:25:04   100.683    1
3 2014-09-01 15:25:07   100.685    0
4 2014-09-01 15:25:11   100.687    0
5 2014-09-01 15:25:14   100.682    1
6 2014-09-01 15:25:18   100.684    1       

此外,在 df 中添加了一个二分变量“wifi”,以表示实验期间 wifi 何时打开或关闭。其中两个传感器暴露于 wifi,而另外两个传感器则处于 wifi 信号之外。 我也想在图表中显示它。也许是通过在实验过程中打开 wifi 时遮蔽该区域或增加线条的大小,但我不太确定如何做到这一点。为了说明这一点,我编辑了示例中中间的 2 个 wifi 条目,但 wifi 一次打开的时间为 10 天,而不是几秒钟。

谢谢

编辑:添加了每个 df 的示例并添加了一些说明

最佳答案

我并不完全清楚你在问什么,但是(如果这就是你想要做的)你可以组合 data.frames,然后将它们全部绘制在一张图表上,使用颜色来区分传感器和 alpha/shape设置来区分 wifi 状态。那么系列在不同时间开始和结束并且具有不同测量分辨率也没有问题。

类似这样的事情:

library(ggplot2)
ggplot(dat, 
       aes(x=time, y=pa, group=sensor,  
           color=factor(sensor),  alpha=factor(wifi))) +
  geom_point(aes(shape=factor(wifi)), size=3) +
  geom_line() +
  scale_alpha_manual(values=c(.3, 1))

(使用完全随机的数据)看起来像这样:

enter image description here

为了生成随机数据,我这样做了:

库(润滑)

# fake data
set.seed(123)
n <- 40

dat <-
  data.frame(sensor=sample(1:4, n, replace=T),
             hr=sample(1:24, n, replace=T), 
             min=sample(1:60, n, replace=T),
             sec=sample(1:60, n, replace=T),
             wifi=rbinom(n, 1, .5),
             pa=100+rnorm(n))

dat$time <- with(dat, ymd_hms(paste('2014-09-01', 
                                    paste(hr, min, sec, sep=':'))))

关于r - ggplot多个时间不等的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27909908/

相关文章:

r - 如何计算/归一化零均值和单位方差

r - 如何在 R session 之间使用 fix() 保留功能更改?

r - 使用 R 创建 Ranger 模型以用于 MLflow 的问题

r - 在 Shiny 的仪表板 R 中动态绘制多个变量

r - 基于时间窗口的不规则时间序列的优化滚动函数

R:通过移动数据行按列扩展数据框

r - 在R中使用geom_rect进行时间序列着色

r - 强制 ggplot 评估计数器变量

r - 从 geom_smooth() 中提取多条趋势线的斜率

r - 根据ggplot R中的年份更改背景颜色面板