gpt4 book ai didi

r - ggplot2: scale_*_time 格式不正确

转载 作者:行者123 更新时间:2023-12-04 06:10:30 25 4
gpt4 key购买 nike

目标

使用 ggplot2::scale_*_time 以特定方式格式化时间轴(使用最新版本的 ggplot2)。

最小 Reprex

# Example data
tib1 <- tibble::tibble(
x = 1:10,
y = lubridate::as.duration(seq(60, 600, length.out = 10))
)

使用 ggplot2::scale_*_timeformat = "%R" 不起作用 - 坐标轴使用 %H:%M 格式化: %S:

# This doesn't work
ggplot2::ggplot(tib1) +
ggplot2::geom_point(ggplot2::aes(x,y)) +
ggplot2::scale_y_time(labels = scales::date_format(format = "%R"))

但是,我可以将时间变量 (y) 添加到任意日期,然后格式化生成的 datetime 对象:

# This works
tib2 <- tib1 %>%
dplyr::mutate(z = lubridate::ymd_hms("2000-01-01 00:00:00") + y)

ggplot2::ggplot(tib2) +
ggplot2::geom_point(ggplot2::aes(x,z)) +
ggplot2::scale_y_datetime(labels = scales::date_format(format = "%R"))

显然,我不希望在我的时间中添加任意日期以使轴格式正确(在引入 ggplot2::scale_*_time 之前我必须这样做,但希望现在避免)。

最佳答案

您的持续时间会自动转换为 hms 对象,该对象始终显示为 hh:mm:ss(即 hms)。 scales::date_format 使用 format ,它不会对 hms 对象执行任何操作,除了将它们转换为字符向量。理想情况下,很容易有一个适当的 format.hms 方法来控制显示多少,但就目前而言 hms:::format.hms 没有实际上采用任何 format 参数。

一个解决方案是简单地删除前三个字符:

ggplot2::ggplot(tib1) +
ggplot2::geom_point(ggplot2::aes(x,y)) +
ggplot2::scale_y_time(labels = function(x) substring(x, 4))

关于r - ggplot2: scale_*_time 格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45367319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com