首页 > 解决方案 > R - ggplot 根据日期在同一图表上绘制两条线

问题描述

在组合、子集我的数据并使用 this: 将 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(),然后将第 20 天的独立文件添加geomline()到相同的文件ggplot中,每行都有自己的“ X”轴在其“aes”内如下:geom_line(data=myData,aes(x=correspondingDate,y=Total)),但我只看到一条线代表Total,另一条是隐藏的;然后我尝试了两条线的“全局” X 轴,使用ggplot(data=myData,aes(x=date13))和 然后geom_line(data=myData,y=totalCorrespondingDate))代表每一天的每条线,但我只看到两条垂直线,一条在左边,另一条在右边,X 轴显示很奇怪日期。

我应该将数据按天分开吗?如果是,我如何“绘制”我的 X 轴以包括这两天?如果不是,当列是日期时间时,如何告诉 ggplot 仅根据日期分隔数据?我知道如何在基本层面上使用融化功能,但我不知道如何告诉它只需要一天中的一天来制作“分区”。

标签: rggplot2

解决方案


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

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()

在此处输入图像描述


推荐阅读