R-根据日期在同一张图表上绘制两条线

时间:2020-02-25 03:53:56

标签: r ggplot2

在合并,设置我的数据并将其DATE列转换为日期时间后,使用以下命令:atms$DATE<-dmy_hms(as.POSIXct(atms$DATE,tz=Sys.timezone())),看起来像这样:

    ATM                DATE DENOM_1 REMAIN_1 DENOM_2 REMAIN_2 Total
176    8 2020-09-13 19:00:00      50     1334     100     1494  2828
177    8 2020-09-13 19:01:00      50     1334     100     1494  2828
178    8 2020-09-13 19:02:00      50     1334     100     1494  2828
179    8 2020-09-13 19:03:00      50     1334     100     1494  2828
180    8 2020-09-13 19:04:00      50     1334     100     1494  2828
181    8 2020-09-13 19:05:00      50     1334     100     1494  2828
182    8 2020-09-13 19:06:00      50     1331     100     1493  2824
183    8 2020-09-13 19:07:00      50     1317     100     1487  2804
184    8 2020-09-13 19:08:00      50     1315     100     1471  2786
185    8 2020-09-13 19:09:00      50     1305     100     1468  2773
186    8 2020-09-13 19:10:00      50     1302     100     1459  2761
187    8 2020-09-13 19:11:00      50     1278     100     1428  2706
188    8 2020-09-13 19:12:00      50     1275     100     1421  2696
189    8 2020-09-13 19:13:00      50     1238     100     1392  2630
190    8 2020-09-13 19:14:00      50     1204     100     1322  2526
191    8 2020-09-13 19:15:00      50     1153     100     1236  2389
192    8 2020-09-13 19:16:00      50     1109     100     1140  2249
193    8 2020-09-13 19:17:00      50     1045     100     1047  2092
194    8 2020-09-13 19:18:00      50      974     100      974  1948
195    8 2020-09-13 19:19:00      50      932     100      868  1800
196    8 2020-09-13 19:20:00      50      871     100      781  1652
197    8 2020-09-13 19:21:00      50      841     100      720  1561
198    8 2020-09-13 19:22:00      50      829     100      705  1534
199    8 2020-09-13 19:22:40      50      825     100      696  1521
200    8 2020-09-13 19:23:00      50      825     100      696  1521
7576   8 2020-09-20 19:00:00      50     1097     100      698  1795
7577   8 2020-09-20 19:01:00      50     1097     100      698  1795
7578   8 2020-09-20 19:02:00      50     1097     100      698  1795
7579   8 2020-09-20 19:03:00      50     1097     100      698  1795
7580   8 2020-09-20 19:04:00      50     1097     100      698  1795
7581   8 2020-09-20 19:05:00      50     1097     100      698  1795
7582   8 2020-09-20 19:06:00      50     1085     100      691  1776
7583   8 2020-09-20 19:07:00      50     1085     100      689  1774
7584   8 2020-09-20 19:08:00      50     1068     100      680  1748
7585   8 2020-09-20 19:09:00      50     1064     100      669  1733
7586   8 2020-09-20 19:10:00      50     1039     100      647  1686
7587   8 2020-09-20 19:11:00      50     1014     100      622  1636
7588   8 2020-09-20 19:12:00      50     1007     100      600  1607
7589   8 2020-09-20 19:13:00      50      991     100      578  1569
7590   8 2020-09-20 19:14:00      50      975     100      552  1527
7591   8 2020-09-20 19:15:00      50      880     100      473  1353
7592   8 2020-09-20 19:16:00      50      816     100      403  1219
7593   8 2020-09-20 19:17:00      50      757     100      341  1098
7594   8 2020-09-20 19:18:00      50      707     100      290   997
7595   8 2020-09-20 19:19:00      50      680     100      256   936
7596   8 2020-09-20 19:20:00      50      644     100      150   794
7597   8 2020-09-20 19:21:00      50      630     100      139   769
7598   8 2020-09-20 19:21:51      50      623     100      110   733
7599   8 2020-09-20 19:22:00      50      623     100      110   733
7600   8 2020-09-20 19:23:00      50      623     100      110   733

我想在同一张图上绘制第13天的总数,而在另一行绘制20天的总数。最初,数据被分成两个.dat文件,每个日期一个。我尝试仅绘制第13天的图形,方法是使用ggplot()将其添加到空的geom_line()中,然后添加一个独立的{{1 }}在第20天到同一geomline(),每行在其“ aes”内都有自己的“ X”轴,如下所示:ggplot,但是我只看到一行代表合计,另一行代表合计隐藏然后我对这两条线都尝试了“全局” X轴,方法是分别使用geom_line(data=myData,aes(x=correspondingDate,y=Total))ggplot(data=myData,aes(x=date13))代表每天的每一行,但是我只看到两条垂直线,一条在左边,一条在右边的另一个,X轴显示奇怪的日期。

我应该每天将数据分开吗?如果是,如何“绘制”我的X轴以包括这两天?如果不是,当列为datetime时,如何告诉ggplot仅根据日期分隔数据?我知道如何在基本级别上使用melt函数,但我不知道该如何仅花费一天的时间来创建“分区”。

1 个答案:

答案 0 :(得分:2)

我建议创建两个新变量,一个用于跟踪行所属的日期,另一个用于显示一天中的时间,但使用一个公共日期。例如:

library(tidyverse)
df  %>%
  mutate(DATE_DAY = floor_date(DATE, "day"),   # day of the row
         DATE_TIME = min(DATE_DAY) + (DATE - DATE_DAY)) %>%   # datetime shifted to 1st day (arbitrarily)
  ggplot(aes(DATE_TIME, Total, color = DATE_DAY, group = DATE_DAY)) +
  geom_line()

enter image description here