如何绘制 4 列与时间的关系

How to plot 4 columns vs time

所以我有这样的数据。 每秒一个数据点。

我需要能够绘制最后 4 列(站立、踏步、骑自行车、New_sitting)与时间的每一天的散点图。基本上如果数据集跨越 5 天,我需要 5 个地块。该程序需要能够知道这一点。 我还将改变最后 4 列数据,以便它们可以是 1、2、3、4 而不是所有 1,因此散点图将显示随时间变化的“上下”函数。

> head(pre,100)
          Date                Time Axis1 Axis2 Axis3     VM Standing Stepping Cycling New_Sitting
1   2022-03-14 2022-03-14 09:51:00    89    41    39 105.47        0        0       1           0
2   2022-03-14 2022-03-14 09:51:01    88   135   117 199.14        0        1       0           0
3   2022-03-14 2022-03-14 09:51:02     0    61     8  61.52        0        0       1           0
4   2022-03-14 2022-03-14 09:51:03     0    25     0  25.00        0        0       0           1
5   2022-03-14 2022-03-14 09:51:04     0     0     0   0.00        0        0       0           1
6   2022-03-14 2022-03-14 09:51:05     0     0     0   0.00        0        0       0           1
7   2022-03-14 2022-03-14 09:51:06     0    24    35  42.44        0        1       0           0
8   2022-03-14 2022-03-14 09:51:07     0    28     0  28.00        1        0       0           0
9   2022-03-14 2022-03-14 09:51:08     4    96    20  98.14        1        0       0           0
10  2022-03-14 2022-03-14 09:51:09     0    11     0  11.00        1        0       0           0
11  2022-03-14 2022-03-14 09:51:10     3    91    22  93.67        1        0       0           0
12  2022-03-14 2022-03-14 09:51:11     9    44     2  44.96        1        0       0           0
13  2022-03-14 2022-03-14 09:51:12     5     8    16  18.57        1        0       0           0
14  2022-03-14 2022-03-14 09:51:13     0     8    21  22.47        1        0       0           0
15  2022-03-14 2022-03-14 09:51:14     1    29    48  56.09        0        1       0           0
16  2022-03-14 2022-03-14 09:51:15     0     1     3   3.16        1        0       0           0
17  2022-03-14 2022-03-14 09:51:16     0    17    35  38.91        0        1       0           0
18  2022-03-14 2022-03-14 09:51:17     0     0     0   0.00        1        0       0           0
19  2022-03-14 2022-03-14 09:51:18     0     0     5   5.00        1        0       0           0
20  2022-03-14 2022-03-14 09:51:19     0     0    29  29.00        0        1       0           0
21  2022-03-14 2022-03-14 09:51:20     0    15    32  35.34        0        1       0           0
22  2022-03-14 2022-03-14 09:51:21     0     0     0   0.00        1        0       0           0
23  2022-03-14 2022-03-14 09:51:22     0     0     0   0.00        1        0       0           0
24  2022-03-14 2022-03-14 09:51:23     0     0     0   0.00        1        0       0           0
25  2022-03-14 2022-03-14 09:51:24     0     0     0   0.00        1        0       0           0
26  2022-03-14 2022-03-14 09:51:25     0    28     4  28.28        1        0       0           0
27  2022-03-14 2022-03-14 09:51:26    13    47    26  55.26        0        1       0           0
28  2022-03-14 2022-03-14 09:51:27    11    28    68  74.36        0        1       0           0
29  2022-03-14 2022-03-14 09:51:28     3    48     5  48.35        1        0       0           0
30  2022-03-14 2022-03-14 09:51:29     0     0     0   0.00        1        0       0           0
31  2022-03-14 2022-03-14 09:51:30     0     0     0   0.00        1        0       0           0
32  2022-03-14 2022-03-14 09:51:31     0     0     0   0.00        1        0       0           0
33  2022-03-14 2022-03-14 09:51:32     0     0     0   0.00        1        0       0           0
34  2022-03-14 2022-03-14 09:51:33     0     0     0   0.00        1        0       0           0
35  2022-03-14 2022-03-14 09:51:34     7    44    20  48.84        1        0       0           0
36  2022-03-14 2022-03-14 09:51:35    10    46    39  61.13        0        1       0           0
37  2022-03-14 2022-03-14 09:51:36     1    13    63  64.34        0        1       0           0
38  2022-03-14 2022-03-14 09:51:37     0     0    11  11.00        1        0       0           0
39  2022-03-14 2022-03-14 09:51:38     0     0     0   0.00        1        0       0           0
40  2022-03-14 2022-03-14 09:51:39     0     0     0   0.00        1        0       0           0
41  2022-03-14 2022-03-14 09:51:40     0     0     0   0.00        1        0       0           0
42  2022-03-14 2022-03-14 09:51:41     0    22    24  32.56        1        0       0           0
43  2022-03-14 2022-03-14 09:51:42     0    19    21  28.32        1        0       0           0
44  2022-03-14 2022-03-14 09:51:43     0     6    17  18.03        1        0       0           0
45  2022-03-14 2022-03-14 09:51:44     0     6     0   6.00        1        0       0           0
46  2022-03-14 2022-03-14 09:51:45     0    14    46  48.08        0        1       0           0
47  2022-03-14 2022-03-14 09:51:46     0     0     0   0.00        1        0       0           0
48  2022-03-14 2022-03-14 09:51:47     0     0     0   0.00        1        0       0           0
49  2022-03-14 2022-03-14 09:51:48     0     0     0   0.00        1        0       0           0
50  2022-03-14 2022-03-14 09:51:49     0     0     0   0.00        1        0       0           0
51  2022-03-14 2022-03-14 09:51:50     0     0     0   0.00        1        0       0           0
52  2022-03-14 2022-03-14 09:51:51     0     0     0   0.00        1        0       0           0
53  2022-03-14 2022-03-14 09:51:52     0     0     0   0.00        1        0       0           0
54  2022-03-14 2022-03-14 09:51:53     0     0     0   0.00        1        0       0           0
55  2022-03-14 2022-03-14 09:51:54     0     0     0   0.00        1        0       0           0
56  2022-03-14 2022-03-14 09:51:55     0     0     0   0.00        1        0       0           0
57  2022-03-14 2022-03-14 09:51:56     0     0     0   0.00        1        0       0           0
58  2022-03-14 2022-03-14 09:51:57     0     0     0   0.00        1        0       0           0
59  2022-03-14 2022-03-14 09:51:58     0     0     0   0.00        1        0       0           0
60  2022-03-14 2022-03-14 09:51:59     0     0     0   0.00        1        0       0           0
61  2022-03-14 2022-03-14 09:52:00     0     0     0   0.00        1        0       0           0
62  2022-03-14 2022-03-14 09:52:01     0     0     0   0.00        1        0       0           0
63  2022-03-14 2022-03-14 09:52:02     0     0     0   0.00        1        0       0           0
64  2022-03-14 2022-03-14 09:52:03     5     0     6   7.81        1        0       0           0
65  2022-03-14 2022-03-14 09:52:04     5     0    64  64.20        0        1       0           0
66  2022-03-14 2022-03-14 09:52:05    10    34    62  71.41        0        1       0           0
67  2022-03-14 2022-03-14 09:52:06     1     0     0   1.00        1        0       0           0
68  2022-03-14 2022-03-14 09:52:07    14    41    69  81.47        0        1       0           0
69  2022-03-14 2022-03-14 09:52:08     0    52    40  65.60        0        1       0           0
70  2022-03-14 2022-03-14 09:52:09     0    25    46  52.35        0        1       0           0
71  2022-03-14 2022-03-14 09:52:10     9    24    41  48.35        0        1       0           0
72  2022-03-14 2022-03-14 09:52:11     0     7    37  37.66        0        1       0           0
73  2022-03-14 2022-03-14 09:52:12     0     0     0   0.00        1        0       0           0
74  2022-03-14 2022-03-14 09:52:13    18    15    57  61.63        0        1       0           0
75  2022-03-14 2022-03-14 09:52:14    13    18    86  88.82        0        1       0           0
76  2022-03-14 2022-03-14 09:52:15     0    34    47  58.01        0        1       0           0
77  2022-03-14 2022-03-14 09:52:16     0     6     1   6.08        1        0       0           0
78  2022-03-14 2022-03-14 09:52:17     0    27    61  66.71        0        1       0           0
79  2022-03-14 2022-03-14 09:52:18     0    21     5  21.59        1        0       0           0
80  2022-03-14 2022-03-14 09:52:19    22    53    62  84.48        0        1       0           0
81  2022-03-14 2022-03-14 09:52:20     6    56    12  57.58        1        0       0           0
82  2022-03-14 2022-03-14 09:52:21    13    10     8  18.25        1        0       0           0
83  2022-03-14 2022-03-14 09:52:22    65    70   120 153.38        0        1       0           0
84  2022-03-14 2022-03-14 09:52:23    29    24    47  60.22        0        1       0           0
85  2022-03-14 2022-03-14 09:52:24     8     7    43  44.29        0        1       0           0
86  2022-03-14 2022-03-14 09:52:25    28    10    90  94.78        0        1       0           0
87  2022-03-14 2022-03-14 09:52:26    31    50    65  87.67        0        1       0           0
88  2022-03-14 2022-03-14 09:52:27    12    81    53  97.54        0        1       0           0
89  2022-03-14 2022-03-14 09:52:28    16    59    33  69.47        0        1       0           0
90  2022-03-14 2022-03-14 09:52:29   148    12    99 178.46        0        0       1           0
91  2022-03-14 2022-03-14 09:52:30    75     2    60  96.07        0        0       1           0
92  2022-03-14 2022-03-14 09:52:31    79     0    23  82.28        0        0       1           0
93  2022-03-14 2022-03-14 09:52:32    16     0     0  16.00        0        0       0           1
94  2022-03-14 2022-03-14 09:52:33     7     0     0   7.00        0        0       0           1
95  2022-03-14 2022-03-14 09:52:34     6     0     0   6.00        0        0       0           1
96  2022-03-14 2022-03-14 09:52:35     0     0     0   0.00        0        0       0           1
97  2022-03-14 2022-03-14 09:52:36     0     0     0   0.00        0        0       0           1
98  2022-03-14 2022-03-14 09:52:37     0     0     0   0.00        0        0       0           1
99  2022-03-14 2022-03-14 09:52:38     0     0     0   0.00        0        0       0           1
100 2022-03-14 2022-03-14 09:52:39     0     0     0   0.00        0        0       0           1

PS 当前使用此代码按日期对所有列求和,可能有用吗?

Summary_PRE <- workday_PRE %>% group_by(Date) %>% mutate_if(is.character,as.numeric) %>% summarise(across(Axis1:Counter,sum))
Summary_PRE <- subset (Summary_PRE, select = -c(Axis1,Axis2,Axis3,VM))

编辑

> dput(head(pre,100))
structure(list(Date = structure(c(19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 19065, 
19065, 19065, 19065, 19065, 19065, 19065), class = "Date"), Time = structure(c(1647265860, 
1647265861, 1647265862, 1647265863, 1647265864, 1647265865, 1647265866, 
1647265867, 1647265868, 1647265869, 1647265870, 1647265871, 1647265872, 
1647265873, 1647265874, 1647265875, 1647265876, 1647265877, 1647265878, 
1647265879, 1647265880, 1647265881, 1647265882, 1647265883, 1647265884, 
1647265885, 1647265886, 1647265887, 1647265888, 1647265889, 1647265890, 
1647265891, 1647265892, 1647265893, 1647265894, 1647265895, 1647265896, 
1647265897, 1647265898, 1647265899, 1647265900, 1647265901, 1647265902, 
1647265903, 1647265904, 1647265905, 1647265906, 1647265907, 1647265908, 
1647265909, 1647265910, 1647265911, 1647265912, 1647265913, 1647265914, 
1647265915, 1647265916, 1647265917, 1647265918, 1647265919, 1647265920, 
1647265921, 1647265922, 1647265923, 1647265924, 1647265925, 1647265926, 
1647265927, 1647265928, 1647265929, 1647265930, 1647265931, 1647265932, 
1647265933, 1647265934, 1647265935, 1647265936, 1647265937, 1647265938, 
1647265939, 1647265940, 1647265941, 1647265942, 1647265943, 1647265944, 
1647265945, 1647265946, 1647265947, 1647265948, 1647265949, 1647265950, 
1647265951, 1647265952, 1647265953, 1647265954, 1647265955, 1647265956, 
1647265957, 1647265958, 1647265959), class = c("POSIXct", "POSIXt"
), tzone = ""), Axis1 = c(89, 88, 0, 0, 0, 0, 0, 0, 4, 0, 3, 
9, 5, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 11, 3, 0, 0, 
0, 0, 0, 7, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 10, 1, 14, 0, 0, 9, 
0, 0, 18, 13, 0, 0, 0, 0, 22, 6, 13, 65, 29, 8, 28, 31, 12, 16, 
148, 75, 79, 16, 7, 6, 0, 0, 0, 0, 0), Axis2 = c(41, 135, 61, 
25, 0, 0, 24, 28, 96, 11, 91, 44, 8, 8, 29, 1, 17, 0, 0, 0, 15, 
0, 0, 0, 0, 28, 47, 28, 48, 0, 0, 0, 0, 0, 44, 46, 13, 0, 0, 
0, 0, 22, 19, 6, 6, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 34, 0, 41, 52, 25, 24, 7, 0, 15, 18, 34, 6, 
27, 21, 53, 56, 10, 70, 24, 7, 10, 50, 81, 59, 12, 2, 0, 0, 0, 
0, 0, 0, 0, 0, 0), Axis3 = c(39, 117, 8, 0, 0, 0, 35, 0, 20, 
0, 22, 2, 16, 21, 48, 3, 35, 0, 5, 29, 32, 0, 0, 0, 0, 4, 26, 
68, 5, 0, 0, 0, 0, 0, 20, 39, 63, 11, 0, 0, 0, 24, 21, 17, 0, 
46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 64, 
62, 0, 69, 40, 46, 41, 37, 0, 57, 86, 47, 1, 61, 5, 62, 12, 8, 
120, 47, 43, 90, 65, 53, 33, 99, 60, 23, 0, 0, 0, 0, 0, 0, 0, 
0), VM = c(105.47, 199.14, 61.52, 25, 0, 0, 42.44, 28, 98.14, 
11, 93.67, 44.96, 18.57, 22.47, 56.09, 3.16, 38.91, 0, 5, 29, 
35.34, 0, 0, 0, 0, 28.28, 55.26, 74.36, 48.35, 0, 0, 0, 0, 0, 
48.84, 61.13, 64.34, 11, 0, 0, 0, 32.56, 28.32, 18.03, 6, 48.08, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7.81, 64.2, 
71.41, 1, 81.47, 65.6, 52.35, 48.35, 37.66, 0, 61.63, 88.82, 
58.01, 6.08, 66.71, 21.59, 84.48, 57.58, 18.25, 153.38, 60.22, 
44.29, 94.78, 87.67, 97.54, 69.47, 178.46, 96.07, 82.28, 16, 
7, 6, 0, 0, 0, 0, 0), Standing = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 
1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 
1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 
1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0), Stepping = c(0, 1, 0, 0, 0, 0, 1, 0, 0, 
0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 
0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0), Cycling = c(1, 0, 1, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 
0, 0, 0, 0, 0, 0, 0), New_Sitting = c(0, 0, 0, 1, 1, 1, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
1, 1, 1, 1, 1, 1, 1, 1)), row.names = c(NA, 100L), class = "data.frame")

我猜测“它们可以是 1、2、3、4 而不是全 1”是指您想要将单个检测转换为某种度量,以捕获随时间变化的频率。我任意总结了滚动 1 分钟时间范围内的检测结果(如果你想要更短的时间 window,你可以使用 lubridate::seconds(10) 之类的东西)。然后我 pivot_longer 将这四列放入一对匹配的“名称”(来自 orig 列)和“值”(来自 orig 列),并绘制它们。请注意,我按日期分面,但给每个分面一个自由的 x 轴刻度,因此在 multi-day 数据中你应该看到一个与当天范围匹配的 x 轴。

pre %>%
  # change columns 7-10 to sum over a 1 minute rolling period
  mutate(across(7:10, ~slider::slide_index_dbl(., Time, sum, 
                       .before = lubridate::minutes(1)))) %>%
  pivot_longer(7:10) %>%
  ggplot(aes(Time, value, color = name)) +
  geom_line() +
  facet_wrap(~Date, scales = "free_x")