【问题标题】:ggplot error in formatting 24 hour time scale格式化 24 小时时间刻度时出现 ggplot 错误
【发布时间】:2019-02-21 11:13:15
【问题描述】:

在 ggplot 上绘制 x 轴刻度时出现错误。

lubridate::parse_date_time(df1$hr,"H:M") -> df1$hr

ggplot(data = df1 , aes(x = hr, y = Val, color = Date)) +geom_line() +
 scale_x_datetime(date_breaks = "1 hours", date_labels = "%H:%M")

以下是我的示例数据。

df1 <- data.table::fread("Date  hr  Val
19/02/19    0:00    1292
19/02/19    1:00    1047
19/02/19    2:00    160
19/02/19    3:00    80
19/02/19    4:00    67
19/02/19    5:00    48
19/02/19    6:00    30
19/02/19    7:00    99
19/02/19    8:00    188
19/02/19    9:00    42
19/02/19    10:00   14
19/02/19    11:00   27
19/02/19    12:00   21
19/02/19    13:00   21
19/02/19    14:00   110
19/02/19    15:00   535
19/02/19    16:00   1503
19/02/19    17:00   2626
19/02/19    18:00   4859
19/02/19    19:00   5699
19/02/19    20:00   5718
19/02/19    21:00   5337
19/02/19    22:00   6101
19/02/19    23:00   5381
20/02/19    0:00    1836
20/02/19    1:00    236
20/02/19    2:00    96
20/02/19    3:00    79
20/02/19    4:00    115
20/02/19    5:00    123
20/02/19    6:00    137
20/02/19    7:00    142
20/02/19    8:00    119
20/02/19    9:00    99
20/02/19    10:00   92
20/02/19    11:00   109
20/02/19    12:00   118
20/02/19    13:00   159
20/02/19    14:00   269
20/02/19    15:00   648
20/02/19    16:00   981
20/02/19    17:00   1371
20/02/19    18:00   1804
20/02/19    19:00   2772
20/02/19    20:00   4582
20/02/19    21:00   5346
20/02/19    22:00   5244
20/02/19    23:00   4956")

我想要做的是在 x 轴刻度上绘制所有小时但低于错误

Error in as.POSIXlt.character(as.character(x), ...) :     character string 
is not in a standard unambiguous format. 

但它适用于同一数据框的子集。

我认为当小时是 1 位长或两位长而不是同时时,它会起作用

【问题讨论】:

  • 它在那里。只需向下滚动.. ggplot(data = df1, aes(x = hr, y = Val, color = Date)) +geom_line()+ scale_x_datetime(date_breaks = "1 hours", date_labels = "%H:%M")
  • 检查 parse_date_time 的结果 - 这不是正确的日期时间格式。
  • 你想画什么?每天不同的线路?
  • 是的。每个日期的不同行。 x 轴上只有一个小时
  • 改行&gt; df1$hr&lt;-as.POSIXct(df1$hr,format="%H") &gt; ggplot(data = df1 , aes(x = hr, y = Val, color = Date)) +geom_line()+ + scale_x_datetime(date_labels = "%H",date_breaks = "1 hour")解决了

标签: r datetime ggplot2


【解决方案1】:

我会这样做:

library(lubridate)

#get df1...

#convert hr to something more useable with...
df1$hr <- hour(hm(df1$hr))

ggplot(df1, aes(x = hr, y = Val, color = Date)) + geom_line()

或者如果您特别想要 "%H:%M" 或类似于您的 x 轴标签时间格式:

ggplot(df1, aes(x = hr, y = Val, color = Date)) + geom_line() + scale_x_continuous(breaks = seq(0, 23, 1), labels = paste(seq(0, 23, 1), "00", sep = ":"))

说明:我从来没有发现处理时间和日期很容易,所以如果你能稍微简化一下问题,那就去做吧。

在您的情况下,您只对一天中的小时感兴趣,因此分钟是多余的。要从您的时间中提取小时作为字符数据类型,有几种方法,但使用 lubridate,您可以使用 hm(df1$hr) 将“10:00”转换为 "10H 0M 0S" 这是一个周期数据类型,您只需要使用 hour() 执行的小时数,这将为您提供 10 作为数字数据类型。

所以作为一个单线 hour(hm(df1$hr)) 将“10:00”转换为 10,然后 ggplot 可以将“Val”与“hr”两者都绘制为数字数据类型,而不是我认为是时间或字符数据类型更轻松的任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多