如何在R中表示事件的时间线(日期时间)

如何在R中表示事件的时间线(日期时间),r,datetime,ggplot2,R,Datetime,Ggplot2,我有一个带有日期时间列的data.frame,如 D = data.frame(time = c("2007-06-22","2007-05-22","2007-05-23")) D$time <- strptime(D$time, format = "%m/%d/%Y") class(D$time) "POSIXlt" "POSIXt" D=data.frame(时间=c(“2007-06-22”、“2007-05-22”、“2007-05-23”)) D$time您可以使用g

我有一个带有日期时间列的data.frame,如

 D = data.frame(time = c("2007-06-22","2007-05-22","2007-05-23"))
 D$time <- strptime(D$time, format = "%m/%d/%Y")
 class(D$time)
"POSIXlt" "POSIXt" 
D=data.frame(时间=c(“2007-06-22”、“2007-05-22”、“2007-05-23”))

D$time您可以使用
ggplot2
scales
来实现这一点:

library(gglot2)
library(scales)
首先创建一个带有
data=D
time
的ggplot,如下所示:。添加一个
geom_条()
(即条),并更改x轴以仅显示月份并设置特定限制(在本例中为2007年的第一天和最后一天):

返回:

如果要显示每月的事件,可以使用
lubridate
dplyr
,以及
ggplot2

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

D = data.frame(time = c("2007-06-22","2007-05-22","2007-05-23"))
在这种情况下,您将获得日期的缩写月份:

D2 <- D
D2$month <- month(D$time, label = TRUE)
绘制新数据(注意:在
geom_bar()
中使用
stat='identity'
,因为您在
y
中显式传递计数:):

返回:

选项3:

使用多年的更灵活的方法:

D = data.frame(time = c("2006-05-16", "2007-06-22","2007-05-22","2007-05-23")) 
(注:增加不同年份的一个日期)

创建一个额外的
年份
列:

D3 <- D
D3$month <- month(D$time, label = TRUE)
D3$year <- year(D$time)
查找每年缺少的月份:

missing <- do.call("rbind", 
                   lapply(unique(D3$year), function(y) {
                     data.frame(year = y,
                                month = levels(D3[D3$year == y, ]$month)[!(levels(D3[D3$year == y, ]$month) %in% D3[D3$year == y, ]$month)],
                                n = 0)


                   }))      
创建新的可视化:

ggplot(data = all, aes(x = month, y = n, group = factor(year), fill = factor(year))) + 
  geom_bar(position = "dodge", stat = 'identity')
看起来是这样的:


你能发布结果的确切内容吗?好的,我喜欢结果,但这是一个小的变通方法,我对其他设计版本没有那么灵活。如果我得到了新的一年,并想按年来绘制它,我总是必须首先定义新的列,对吗?有没有办法直接处理单变量时间的情况?当做
D = data.frame(time = c("2006-05-16", "2007-06-22","2007-05-22","2007-05-23")) 
D3 <- D
D3$month <- month(D$time, label = TRUE)
D3$year <- year(D$time)
D3 <- D3 %>% 
  group_by(year, month) %>%
  summarise(n = n())
missing <- do.call("rbind", 
                   lapply(unique(D3$year), function(y) {
                     data.frame(year = y,
                                month = levels(D3[D3$year == y, ]$month)[!(levels(D3[D3$year == y, ]$month) %in% D3[D3$year == y, ]$month)],
                                n = 0)


                   }))      
all <- rbind(as.data.frame(D3), missing)
ggplot(data = all, aes(x = month, y = n, group = factor(year), fill = factor(year))) + 
  geom_bar(position = "dodge", stat = 'identity')