【问题标题】:Time Series Plot with qplot for hh:mm:ss variable - How to format?时间序列图与 qplot 用于 hh:mm:ss 变量 - 如何格式化?
【发布时间】:2017-09-28 17:05:20
【问题描述】:

如何格式化 x 轴,使其可以显示为 hh:mm:ss?

这是我的一组样本:

structure(list(Catraca = c(1L, 253L, 72L, 49L, 2L, 391L, 53L, 
52L, 505L, 206L, 105L, 169L, 180L, 222L, 165L, 192L, 286L, 129L, 
337L, 270L), Horario = structure(c(360L, 660L, 1740L, 1800L, 
1980L, 1980L, 2280L, 2280L, 6060L, 6660L, 6720L, 7200L, 7260L, 
7920L, 8460L, 8460L, 8580L, 8580L, 9000L, 9060L), class = "ITime")), .Names = c("Catraca", 
"Horario"), class = c("data.table", "data.frame"), row.names = c(NA, 
-20L))

第一列是整数,第二列是 ITime 类,它来自 POSIXct 属性,因为我只想显示 hh:mm:ss。

这就是我尝试绘制的方式: qplot(data = b, x = Horario, y = Catraca )。我知道我需要以某种方式格式化 Horario,但我在网上找不到它。我需要你的帮助。

注意: R studio 显示这条消息Don't know how to automatically pick scale for object of type ITime. Defaulting to continuous.

【问题讨论】:

    标签: r ggplot2 formatting


    【解决方案1】:

    ITime 是特定于 data.table 包的类,因此 qplot() 不知道如何处理它(并且只作用于底层整数值)。

    我不认为 base R 有一个 time-only 类,所以你可能需要使用一个包。 chron 包可以像 here 一样工作,尽管 ggplot2 可能与 hms package 配合得更好,因为它是 tidyverse 的一部分。

    EDIT 基于 Nova 的回答。

    b$time <- as.POSIXct(paste0("2017-09-28 ", b$Horario))
    qplot(data = b, x = time, y = Catraca)
    

    但是,除非经过的时间总量非常小,否则我怀疑它会显示秒数,因为它会根据较大的四舍五入时间单位(例如,小时、半小时)选择轴刻度/标签。

    如果您真的想自定义轴刻度和标签的显示方式,最简单的方法是从 qplot() 切换到 ggplot()。

    【讨论】:

    • 我比较关心的是分钟,所以没问题。剧情看起来好多了。现在我得想办法摆脱它附带的Set 28了哈哈
    【解决方案2】:

    您能否发布一个更好的数据示例?当我尝试将其设置为 data.frame 时收到错误消息。

    对于此类问题,一个简单的解决方法是将时间和日期设置为 POSIXct 类型,但给它所有相同的日期。通常绘图程序只会在轴上显示时间,而忽略日期。

    【讨论】:

    • 数据问题已经解决,抱歉。该集现在可以使用(您需要导入 data.table 库)。换个话题,你给我的建议不错,看看qplot如何显示
    猜你喜欢
    • 2011-10-28
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 2013-09-06
    • 2012-10-22
    • 2015-12-18
    相关资源
    最近更新 更多