轴标签的格式化润滑持续时间列
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"))
我想绘制包含数字和持续时间的数据。对于字符向量的转换,我选择了 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"))