时间序列图用qplot表示hh:mm:ss变量 - 如何格式化?

时间:2017-09-28 17:05:21

标签: r ggplot2 formatting

如何格式化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.

2 个答案:

答案 0 :(得分:1)

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

我不认为基地R只有一个时间课程,所以你可能需要使用一个包。 chron包可以作为here使用,尽管ggplot2可能会更好地与hms package一起使用,因为它是tidyverse的一部分。

根据Nova的回答

编辑

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

然而,除非经过的总时间非常小,否则我怀疑它会显示秒数,因为它会根据更大的圆形时间单位(例如,小时,半小时)选择轴刻度/标签。

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

答案 1 :(得分:1)

您可以发布更好的数据示例吗?当我尝试将其设为data.frame时,我收到错误消息。

对于这种问题,一个简单的解决方法是将时间和日期设为POSIXct类型,但是给它所有相同的日期。通常,绘图程序将仅显示轴上的时​​间,并且它将忽略日期。