删除连接geom_line

时间:2019-08-05 11:12:54

标签: r ggplot2

enter image description here我正在尝试创建一个以日/夜为颜色的时间深度图。我的数据包含一些缺失的元素,我想保持空白。但是,当我在ggplot中绘制图形时,会得到一条线,将“夜”中的最终值连接到“夜”中的下一个值,该线覆盖了我的“日”图。在我的代码中,晚上归为7 pm-7am,白天为7am至7pm。

我想知道是否有可能在两个时间段之间删除此行。

首先,我将data$datetime转换为POSIXct:

data$datetime <- as.POSIXct(data$datetime, format="%d/%m/%Y %H:%M:%S")

然后在ggplot中绘制:

ggplot(data, aes(datetime, Depth, color=diel)) + 
  geom_line() + 
  xlab("Time")+
  scale_y_reverse(breaks= seq(-100, 100, by = 20)) +
  scale_x_datetime(breaks = date_breaks("2 hours"), labels = date_format("%H"))+
  labs(y = 'Depth (m)')

数据(对长度表示歉意):

structure(list(Depth = c(14.5, 23, 33, 28, 23, 9.5, 7, 18, 18, 
9.5, 18, 33, 40.5, 60, 69.5, 69.5, 60, 40.5, 40.5, 33, 23, 12, 
12, 9.5, 23, 23, 23, 12, 12, 18, 12, 12, 12, 14.5, 18, 18, 9.5, 
18, 33, 40.5, 60, 69.5, 69.5, 60, 60, 50, 40.5, 23, 13.5, 4.5, 
11.5, 13.5, 13.5, 13.5, 19, 16, 23.5, 32, 47, 64.5, 64.5, 64.5, 
64.5, 47, 38.5, 27.5, 19, 11.5, 9.5, 16, 16, 19, 32, 47, 55.5, 
38.5, 23.5, 11.5, 11.5, 16, 23.5, 38.5, 55.5, 64.5, 55.5, 32, 
23.5, 19, 19, 19, 13.5, 11.5, 13.5, 19, 27.5, 27.5, 49.5, 49.5, 
53, 39.5, 43, 44.5, 47.5, 53, 59, 53, 53, 59, 55.5, 55.5, 55.5, 
59, 55.5, 59, 55.5, 55.5, 59, 53, 49.5, 49.5, 49.5, 44.5, 47.5, 
49.5, 49.5, 55.5, 55.5, 55.5, 49.5, 55.5, 53, 46, 49.5, 53, 55.5, 
55.5, 55.5, 53, 49.5, 53, 53, 49.5, 53, 53, 52, 46.5, 48.5, 56.5, 
61.5, 61.5, 66, 56.5, 66, 61.5, 56.5, 56.5, 56.5, 44, 44, 48.5, 
52, 52, 48.5, 48.5, 48.5, 48.5, 34, 42, 52, 56.5, 52, 56.5, 61.5, 
61.5, 61.5, 46.5, 46.5, 48.5, 52, 52, 48.5, 48.5, 46.5, 42, 44, 
48.5, 48.5, 52, 46.5, 42, 42, 42, 38, 39, 44, 53.5, 61, 50, 45.5, 
44, 44, 44, 45.5, 50, 50, 45.5, 42, 39, 40, 42, 42, 47.5, 45.5, 
45.5, 45.5, 47.5, 47.5, 47.5, 50, 47.5, 50, 45.5, 42, 42, 50, 
50, 50, 53.5, 50, 53.5, 53.5, 50, 45.5, 40.5, 42, 42, 42, 42, 
53.5, 57, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, 34.5, 37, 37, 39, 37, 37, 46, 46, 50, 50, 58.5, 54, 
50, 46, 43, 43, 39, 39, 39, 37, 43, 37, 34.5, 34.5, 31, 35.5, 
39, 46, 50, 46, 50, 50, 46, 37, 33.5, 43, 41, 37, 41, 46, 43, 
50, 50, 50, 50, 54, 54, 54, 42.5, 42.5, 38, 42.5, 33.5, 30, 28, 
28, 28, 26, 26, 26, 28, 30, 33.5, 38, 38, 33.5, 30, 26, 26, 28, 
28, 38, 38, 30, 30, 26, 26, 30, 42.5, 42.5, 33.5, 23.5, 23.5, 
23.5, 26, 23.5, 21, 22, 21, 22, 22, 19.5, 18, 17.5, 18, 19.5, 
20, 20, 25, 25, 25, 25, 30, 25, 20, 25, 25, 25, 25, 42.5, 42.5, 
62.5, 73.5, 73.5, 73.5, 52.5, 42.5, 30, 25, 20, 3, 14, 20, 25, 
25, 25, 20, 20, 25, 25, 35, 35, 25, 20, 20, 20, 42.5, 35, 25, 
25, 20, 20, 25, 35), datetime = structure(1:432, .Label = c("20/03/2018 00:00", 
"20/03/2018 00:02", "20/03/2018 00:05", "20/03/2018 00:07", "20/03/2018 00:10", 
"20/03/2018 00:12", "20/03/2018 00:15", "20/03/2018 00:17", "20/03/2018 00:20", 
"20/03/2018 00:22", "20/03/2018 00:25", "20/03/2018 00:27", "20/03/2018 00:30", 
"20/03/2018 00:32", "20/03/2018 00:35", "20/03/2018 00:37", "20/03/2018 00:40", 
"20/03/2018 00:42", "20/03/2018 00:45", "20/03/2018 00:47", "20/03/2018 00:50", 
"20/03/2018 00:52", "20/03/2018 00:55", "20/03/2018 00:57", "20/03/2018 01:00", 
"20/03/2018 01:02", "20/03/2018 01:05", "20/03/2018 01:07", "20/03/2018 01:10", 
"20/03/2018 01:12", "20/03/2018 01:15", "20/03/2018 01:17", "20/03/2018 01:20", 
"20/03/2018 01:22", "20/03/2018 01:25", "20/03/2018 01:27", "20/03/2018 01:30", 
"20/03/2018 01:32", "20/03/2018 01:35", "20/03/2018 01:37", "20/03/2018 01:40", 
"20/03/2018 01:42", "20/03/2018 01:45", "20/03/2018 01:47", "20/03/2018 01:50", 
"20/03/2018 01:52", "20/03/2018 01:55", "20/03/2018 01:57", "20/03/2018 02:00", 
"20/03/2018 02:02", "20/03/2018 02:05", "20/03/2018 02:07", "20/03/2018 02:10", 
"20/03/2018 02:12", "20/03/2018 02:15", "20/03/2018 02:17", "20/03/2018 02:20", 
"20/03/2018 02:22", "20/03/2018 02:25", "20/03/2018 02:27", "20/03/2018 02:30", 
"20/03/2018 02:32", "20/03/2018 02:35", "20/03/2018 02:37", "20/03/2018 02:40", 
"20/03/2018 02:42", "20/03/2018 02:45", "20/03/2018 02:47", "20/03/2018 02:50", 
"20/03/2018 02:52", "20/03/2018 02:55", "20/03/2018 02:57", "20/03/2018 03:00", 
"20/03/2018 03:02", "20/03/2018 03:05", "20/03/2018 03:07", "20/03/2018 03:10", 
"20/03/2018 03:12", "20/03/2018 03:15", "20/03/2018 03:17", "20/03/2018 03:20", 
"20/03/2018 03:22", "20/03/2018 03:25", "20/03/2018 03:27", "20/03/2018 03:30", 
"20/03/2018 03:32", "20/03/2018 03:35", "20/03/2018 03:37", "20/03/2018 03:40", 
"20/03/2018 03:42", "20/03/2018 03:45", "20/03/2018 03:47", "20/03/2018 03:50", 
"20/03/2018 03:52", "20/03/2018 03:55", "20/03/2018 03:57", "20/03/2018 08:00", 
"20/03/2018 08:02", "20/03/2018 08:05", "20/03/2018 08:07", "20/03/2018 08:10", 
"20/03/2018 08:12", "20/03/2018 08:15", "20/03/2018 08:17", "20/03/2018 08:20", 
"20/03/2018 08:22", "20/03/2018 08:25", "20/03/2018 08:27", "20/03/2018 08:30", 
"20/03/2018 08:32", "20/03/2018 08:35", "20/03/2018 08:37", "20/03/2018 08:40", 
"20/03/2018 08:42", "20/03/2018 08:45", "20/03/2018 08:47", "20/03/2018 08:50", 
"20/03/2018 08:52", "20/03/2018 08:55", "20/03/2018 08:57", "20/03/2018 09:00", 
"20/03/2018 09:02", "20/03/2018 09:05", "20/03/2018 09:07", "20/03/2018 09:10", 
"20/03/2018 09:12", "20/03/2018 09:15", "20/03/2018 09:17", "20/03/2018 09:20", 
"20/03/2018 09:22", "20/03/2018 09:25", "20/03/2018 09:27", "20/03/2018 09:30", 
"20/03/2018 09:32", "20/03/2018 09:35", "20/03/2018 09:37", "20/03/2018 09:40", 
"20/03/2018 09:42", "20/03/2018 09:45", "20/03/2018 09:47", "20/03/2018 09:50", 
"20/03/2018 09:52", "20/03/2018 09:55", "20/03/2018 09:57", "20/03/2018 10:00", 
"20/03/2018 10:02", "20/03/2018 10:05", "20/03/2018 10:07", "20/03/2018 10:10", 
"20/03/2018 10:12", "20/03/2018 10:15", "20/03/2018 10:17", "20/03/2018 10:20", 
"20/03/2018 10:22", "20/03/2018 10:25", "20/03/2018 10:27", "20/03/2018 10:30", 
"20/03/2018 10:32", "20/03/2018 10:35", "20/03/2018 10:37", "20/03/2018 10:40", 
"20/03/2018 10:42", "20/03/2018 10:45", "20/03/2018 10:47", "20/03/2018 10:50", 
"20/03/2018 10:52", "20/03/2018 10:55", "20/03/2018 10:57", "20/03/2018 11:00", 
"20/03/2018 11:02", "20/03/2018 11:05", "20/03/2018 11:07", "20/03/2018 11:10", 
"20/03/2018 11:12", "20/03/2018 11:15", "20/03/2018 11:17", "20/03/2018 11:20", 
"20/03/2018 11:22", "20/03/2018 11:25", "20/03/2018 11:27", "20/03/2018 11:30", 
"20/03/2018 11:32", "20/03/2018 11:35", "20/03/2018 11:37", "20/03/2018 11:40", 
"20/03/2018 11:42", "20/03/2018 11:45", "20/03/2018 11:47", "20/03/2018 11:50", 
"20/03/2018 11:52", "20/03/2018 11:55", "20/03/2018 11:57", "20/03/2018 12:00", 
"20/03/2018 12:02", "20/03/2018 12:05", "20/03/2018 12:07", "20/03/2018 12:10", 
"20/03/2018 12:12", "20/03/2018 12:15", "20/03/2018 12:17", "20/03/2018 12:20", 
"20/03/2018 12:22", "20/03/2018 12:25", "20/03/2018 12:27", "20/03/2018 12:30", 
"20/03/2018 12:32", "20/03/2018 12:35", "20/03/2018 12:37", "20/03/2018 12:40", 
"20/03/2018 12:42", "20/03/2018 12:45", "20/03/2018 12:47", "20/03/2018 12:50", 
"20/03/2018 12:52", "20/03/2018 12:55", "20/03/2018 12:57", "20/03/2018 13:00", 
"20/03/2018 13:02", "20/03/2018 13:05", "20/03/2018 13:07", "20/03/2018 13:10", 
"20/03/2018 13:12", "20/03/2018 13:15", "20/03/2018 13:17", "20/03/2018 13:20", 
"20/03/2018 13:22", "20/03/2018 13:25", "20/03/2018 13:27", "20/03/2018 13:30", 
"20/03/2018 13:32", "20/03/2018 13:35", "20/03/2018 13:37", "20/03/2018 13:40", 
"20/03/2018 13:42", "20/03/2018 13:45", "20/03/2018 13:47", "20/03/2018 13:50", 
"20/03/2018 13:52", "20/03/2018 13:55", "20/03/2018 13:57", "20/03/2018 14:00", 
"20/03/2018 14:02", "20/03/2018 14:05", "20/03/2018 14:07", "20/03/2018 14:10", 
"20/03/2018 14:12", "20/03/2018 14:15", "20/03/2018 14:17", "20/03/2018 14:20", 
"20/03/2018 14:22", "20/03/2018 14:25", "20/03/2018 14:27", "20/03/2018 14:30", 
"20/03/2018 14:32", "20/03/2018 14:35", "20/03/2018 14:37", "20/03/2018 14:40", 
"20/03/2018 14:42", "20/03/2018 14:45", "20/03/2018 14:47", "20/03/2018 14:50", 
"20/03/2018 14:52", "20/03/2018 14:55", "20/03/2018 14:57", "20/03/2018 15:00", 
"20/03/2018 15:02", "20/03/2018 15:05", "20/03/2018 15:07", "20/03/2018 15:10", 
"20/03/2018 15:12", "20/03/2018 15:15", "20/03/2018 15:17", "20/03/2018 15:20", 
"20/03/2018 15:22", "20/03/2018 15:25", "20/03/2018 15:27", "20/03/2018 15:30", 
"20/03/2018 15:32", "20/03/2018 15:35", "20/03/2018 15:37", "20/03/2018 15:40", 
"20/03/2018 15:42", "20/03/2018 15:45", "20/03/2018 15:47", "20/03/2018 15:50", 
"20/03/2018 15:52", "20/03/2018 15:55", "20/03/2018 15:57", "20/03/2018 16:00", 
"20/03/2018 16:02", "20/03/2018 16:05", "20/03/2018 16:07", "20/03/2018 16:10", 
"20/03/2018 16:12", "20/03/2018 16:15", "20/03/2018 16:17", "20/03/2018 16:20", 
"20/03/2018 16:22", "20/03/2018 16:25", "20/03/2018 16:27", "20/03/2018 16:30", 
"20/03/2018 16:32", "20/03/2018 16:35", "20/03/2018 16:37", "20/03/2018 16:40", 
"20/03/2018 16:42", "20/03/2018 16:45", "20/03/2018 16:47", "20/03/2018 16:50", 
"20/03/2018 16:52", "20/03/2018 16:55", "20/03/2018 16:57", "20/03/2018 17:00", 
"20/03/2018 17:02", "20/03/2018 17:05", "20/03/2018 17:07", "20/03/2018 17:10", 
"20/03/2018 17:12", "20/03/2018 17:15", "20/03/2018 17:17", "20/03/2018 17:20", 
"20/03/2018 17:22", "20/03/2018 17:25", "20/03/2018 17:27", "20/03/2018 17:30", 
"20/03/2018 17:32", "20/03/2018 17:35", "20/03/2018 17:37", "20/03/2018 17:40", 
"20/03/2018 17:42", "20/03/2018 17:45", "20/03/2018 17:47", "20/03/2018 17:50", 
"20/03/2018 17:52", "20/03/2018 17:55", "20/03/2018 17:57", "20/03/2018 20:00", 
"20/03/2018 20:02", "20/03/2018 20:05", "20/03/2018 20:07", "20/03/2018 20:10", 
"20/03/2018 20:12", "20/03/2018 20:15", "20/03/2018 20:17", "20/03/2018 20:20", 
"20/03/2018 20:22", "20/03/2018 20:25", "20/03/2018 20:27", "20/03/2018 20:30", 
"20/03/2018 20:32", "20/03/2018 20:35", "20/03/2018 20:37", "20/03/2018 20:40", 
"20/03/2018 20:42", "20/03/2018 20:45", "20/03/2018 20:47", "20/03/2018 20:50", 
"20/03/2018 20:52", "20/03/2018 20:55", "20/03/2018 20:57", "20/03/2018 21:00", 
"20/03/2018 21:02", "20/03/2018 21:05", "20/03/2018 21:07", "20/03/2018 21:10", 
"20/03/2018 21:12", "20/03/2018 21:15", "20/03/2018 21:17", "20/03/2018 21:20", 
"20/03/2018 21:22", "20/03/2018 21:25", "20/03/2018 21:27", "20/03/2018 21:30", 
"20/03/2018 21:32", "20/03/2018 21:35", "20/03/2018 21:37", "20/03/2018 21:40", 
"20/03/2018 21:42", "20/03/2018 21:45", "20/03/2018 21:47", "20/03/2018 21:50", 
"20/03/2018 21:52", "20/03/2018 21:55", "20/03/2018 21:57", "20/03/2018 22:00", 
"20/03/2018 22:02", "20/03/2018 22:05", "20/03/2018 22:07", "20/03/2018 22:10", 
"20/03/2018 22:12", "20/03/2018 22:15", "20/03/2018 22:17", "20/03/2018 22:20", 
"20/03/2018 22:22", "20/03/2018 22:25", "20/03/2018 22:27", "20/03/2018 22:30", 
"20/03/2018 22:32", "20/03/2018 22:35", "20/03/2018 22:37", "20/03/2018 22:40", 
"20/03/2018 22:42", "20/03/2018 22:45", "20/03/2018 22:47", "20/03/2018 22:50", 
"20/03/2018 22:52", "20/03/2018 22:55", "20/03/2018 22:57", "20/03/2018 23:00", 
"20/03/2018 23:02", "20/03/2018 23:05", "20/03/2018 23:07", "20/03/2018 23:10", 
"20/03/2018 23:12", "20/03/2018 23:15", "20/03/2018 23:17", "20/03/2018 23:20", 
"20/03/2018 23:22", "20/03/2018 23:25", "20/03/2018 23:27", "20/03/2018 23:30", 
"20/03/2018 23:32", "20/03/2018 23:35", "20/03/2018 23:37", "20/03/2018 23:40", 
"20/03/2018 23:42", "20/03/2018 23:45", "20/03/2018 23:47", "20/03/2018 23:50", 
"20/03/2018 23:52", "20/03/2018 23:55", "20/03/2018 23:57"), class = "factor"), 
    diel = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L), .Label = c("Day", "Night"), class = "factor")), class = "data.frame", row.names = c(NA, 
-432L))

1 个答案:

答案 0 :(得分:2)

这是一种可以填补超过10分钟的空白的解决方案。

首先将日期四舍五入到最接近的10分钟(可以更改),然后使用right_join获取所有可能的时间和diel的完整集合。

library("tidyverse")

data_gaps <- data %>% 
  mutate(hours = lubridate::round_date(datetime, unit = "10 minute")) %>%
  right_join(
    crossing(
      hours = seq(from = min(.$hours), to = max(.$hours), by = "10 mins"),
      diel = c("Day", "Night")
      )
    ) %>% 
  mutate(datetime =  coalesce(datetime, hours)) %>% 
  select(-hours)