【问题标题】:R - ggplot two lines on same graph depending on dateR - ggplot 根据日期在同一图表上绘制两条线
【发布时间】:2020-02-25 03:53:56
【问题描述】:

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

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

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

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

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

    【讨论】:

    • 也许你可以加一个color = as.factor(DATE_DAY)来摆脱连续的规模
    • 非常感谢 Jon Spring,我将您的答案与 dc37 评论结合起来,然后我只是使用实验室来覆盖文本,因为我没有使用 DATE_DAY 作为图例。
    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2021-01-25
    • 2017-02-05
    相关资源
    最近更新 更多