轴标签的格式化润滑持续时间列

Format lubridate duration column for axis labelling

我想绘制包含数字和持续时间的数据。对于字符向量的转换,我选择了 lubridate 包。不幸的是,持续时间总是以秒为单位打印在 x 轴上:

set.seed(20161027)
a <- c("00:30:45", "00:59:07", "01:08:30", "02:10:09", "02:20:53")
b <- rnorm(n = 5)
example <- data.frame(a, b)
# This is what I want
ggplot(data = example, aes(x = a, y = b)) +
geom_point()
library(lubridate)
a <- hms(a)
a <- as.duration(a)
example <- data.frame(a, b)
ggplot(data = example, aes(x = a, y = b)) +
geom_point()

这就是我想要的样子。

这是目前的样子。 有没有 lubridate 方法可以将时间格式化为更漂亮的格式?或者我是否需要保留轴标签的字符向量?

不确定为什么要对 lubridate 执行此操作。通过使用 as.POSIXct:

a <- as.POSIXct(c("00:30:45", "00:59:07", "01:08:30", "02:10:09", "02:20:53"),
                format="%H:%M:%S")
b <- rnorm(n = 5)
example <- data.frame(a, b)
ggplot(data = example, aes(x = a, y = b)) +
  geom_point()

我觉得@HubertL的方案已经足够好了,但是如果你坚持使用lubridate,你可以试试

library(lubridate)
set.seed(20161027)
a <- c("00:30:45", "00:59:07", "01:08:30", "02:10:09", "02:20:53")
b <- rnorm(5)
example <- data.frame(a=hms(a), b=b)

ggplot(data = example, aes(x = a$hour + a$minute / 60 + a$second / 60^2, y = b)) +
    geom_point() + 
    scale_x_continuous(name="a", 
                       breaks=c(0.5, 1, 1.5, 2), 
                       labels=c("00:30", "01:00", "01:30", "02:00"))