【问题标题】:Adding a vline in ggplot2 using time使用时间在 ggplot2 中添加 vline
【发布时间】:2013-02-21 10:46:12
【问题描述】:

我在为 gplot2 图形添加垂直线时遇到了一些问题。

下面列出了我的示例数据框。

set.seed(1234)
df <- data.frame(Date=seq(as.POSIXct("05:00", format="%H:%M"), 
                          as.POSIXct("23:00", format="%H:%M"), by="hours"))
df$Counts <- sample(19)
df <- df[-c(4,7,17,18),]

# generate the groups automatically and plot
idx <- c(1, diff(df$Date))
i2 <- c(1,which(idx != 1), nrow(df)+1)
df$grp <- rep(1:length(diff(i2)), diff(i2))
g <- ggplot(df, aes(x=Date, y=Counts)) + geom_line(aes(group = grp)) + 
  geom_point()

似乎有很多关于堆栈溢出和网络的讨论,通常是关于在时间序列上使用 vlines。我已经尝试纠正我的代码,但到目前为止我运气不佳。

例如,我想要 21 日下午 2 点的垂直线。

g1 <- g + geom_vline(xintercept=as.numeric(as.Date("2013-02-21 14:00:00")))

谁能告诉我如何让它工作?

【问题讨论】:

  • as.Date 仅保留日期部分,而不是 %H:%M:%S 信息。

标签: r ggplot2


【解决方案1】:

您必须将as.Date() 替换为as.POSIXct(),因为您还需要时间而不仅仅是日期(函数as.Date() 仅代表日期部分)。

g + geom_vline(xintercept=as.numeric(as.POSIXct("2013-02-21 14:00:00")))

您可以通过查看这两种情况来了解区别:

 as.Date("2013-02-21 14:00:00")
[1] "2013-02-21"

 as.POSIXct("2013-02-21 14:00:00")
[1] "2013-02-21 14:00:00 EET"

【讨论】:

  • 非常感谢。无论如何我可以使它更通用并摆脱 vline 命令上的日期吗?我正在为不同日期的多个文件运行此脚本,因此只想为 vline 添加时间。这可能吗?
  • @KT_1 geom_vline() 中的日期是必要的,因为它是从 1970 年 1 月 1 日开始计算的。转换为数字时。
猜你喜欢
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 2016-06-23
  • 2021-09-16
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多