将两个日期对象的线图绘制在同一张图中。

3
在我的数据框中,有两列,它们都是日期对象(Date1和Date2)。我想画出这两个日期对象的线条,并将它们放入同一个图中,但找不到方法。我应该使用吗? 单变量的图表
df %>%
  mutate(week = week(Date1)) %>%
  ggplot(aes(week)) +
  geom_freqpoly()

数据

structure(list(Date1 = structure(c(1583712000, 1583712000, 1583712000, 
1584144000, 1584316800, 1584489600, 1585094400, 1585267200, 1585267200, 
1588550400, 1589414400, 1591228800, 1592179200, 1597104000, 1597363200, 
1597881600, 1605052800, 1605484800, 1614902400, 1580256000, 1582502400, 
1582761600, 1582848000, 1583107200, 1583107200, 1583712000, 1583712000, 
1583884800, 1583884800, 1584316800, 1584316800, 1584316800, 1584316800, 
1584316800, 1584316800, 1584316800, 1584489600, 1584921600, 1585180800, 
1585267200, 1587513600, 1591228800, 1602460800, 1604016000, 1613779200, 
1613779200, 1614038400, 1615852800, 1615852800, 1615852800, 1623024000, 
1624233600, 1629244800, 1630281600, 1582588800, 1582848000, 1582848000, 
1583193600, 1583193600, 1583193600, 1583280000, 1583712000, 1583712000, 
1583712000, 1583884800, 1583884800, 1583971200, 1583884800, 1615593600, 
1615939200, 1584489600, 1584662400, 1584662400, 1584662400, 1584921600, 
1585094400, 1585180800, 1585180800, 1585526400, 1585785600, 1586304000, 
1587600000, 1586131200, 1586131200, 1586217600, 1586908800, 1587340800, 
1587340800, 1587340800, 1587340800, 1587513600, 1587600000, 1587945600, 
1588032000, 1588723200, 1589155200, 1589241600, 1589414400, 1589760000, 
1589760000, 1589932800, 1590969600, 1596240000, 1596240000, 1598832000, 
1601510400, 1601596800, 1602720000, 1602547200, 1602547200, 1602547200, 
1603152000, 1604620800, 1604620800, 1605225600, 1605225600, 1606435200, 
1606435200, 1607644800, 1607644800, 1578355200, 1610323200, 1607904000, 
1610582400, 1611532800, 1580169600, 1613692800, 1613692800, 1583280000, 
1583366400, 1615334400, 1616716800, 1618358400, 1618790400, 1619049600, 
1619568000, 1619395200, 1622073600, 1623024000, 1612915200, 1620777600
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), Date2 = structure(c(1579824000, 
1579824000, 1581552000, 1582243200, 1583193600, 1583193600, 1583366400, 
1583366400, 1583366400, 1583452800, 1583971200, 1585526400, 1583971200, 
1583971200, 1584057600, 1584057600, 1584316800, 1584316800, 1584489600, 
1584576000, 1584576000, 1584662400, 1585267200, 1585267200, 1585526400, 
1585785600, 1585785600, 1585872000, 1586390400, 1586908800, 1587600000, 
1587945600, 1588032000, 1588032000, 1588636800, 1588809600, 1588809600, 
1589241600, 1589414400, 1591660800, 1592438400, 1596412800, 1596499200, 
1597190400, 1598486400, 1598572800, 1598572800, 1600300800, 1603411200, 
1604275200, 1606348800, 1606521600, 1606780800, 1607472000, 1611273600, 
1611705600, 1612224000, 1614211200, 1614556800, 1616025600, 1616025600, 
1618444800, 1618444800, 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, 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), class = c("POSIXct", "POSIXt"), tzone = "UTC")), row.names = c(NA, 
-141L), class = c("tbl_df", "tbl", "data.frame"))
4个回答

2
我们首先使用 lubridate::week 提取完整的 7 天周期数,然后使用 tidyr::pivotlonger 将两个新创建变量的名称存储在一个变量中,以便我们可以将其映射到 colour 美学以区分这些线条。
library(tidyr)
library(lubridate)
library(ggplot2)

df %>%
  mutate(across(everything(), ~ week(.x), .names = "{.col}_Week")) %>% 
  pivot_longer(c(Date1_Week, Date2_Week), names_to = "Date", values_to = "Value") %>%
  ggplot(aes(Value, colour = Date)) +
  geom_freqpoly(size = 1, binwidth = 0.9) + 
  labs(x = "Week")

enter image description here


2
这里有一个使用geom_line的版本:
library(tidyverse)
df %>% 
    mutate(across(everything(), ~week(.))) %>% 
    pivot_longer(everything(), 
                 names_to = "name",
                 values_to = "week") %>% 
    count(name, week) %>% 
    ggplot(aes(x= week, y=n, color=name, group=name)) +
    geom_line() +
    coord_cartesian(ylim = c(0, 20))

enter image description here


1
这里有一个简单的解决方案,使用颜色来区分日期。
library(lubridate)
library(tidyverse)

df %>% 
  ggplot()+
  geom_freqpoly(aes(week(Date1), col = "Date1"))+
  geom_freqpoly(aes(week(Date2), col = "Date2"))

enter image description here


1
另一个主题的变化:

library(ggplot2)
library(dplyr)
library(tidyr)
library(lubridate)

df %>%
  pivot_longer(everything())%>% 
  mutate(week = week(value)) %>%
  ggplot(aes(week, colour = name)) +
  geom_freqpoly()

该内容创建于2021年9月1日,使用reprex包(v2.0.0)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接