【问题标题】:Hour by step of 2 hours in the form H:M on the x axis in ggplot在 ggplot 的 x 轴上以 H:M 形式逐小时 2 小时
【发布时间】:2023-03-30 19:29:01
【问题描述】:

我正在用 ggplot 做一个情节:

foo$time<-format(as.POSIXct(foo$Date, format="%Y-%m-%d %H:%M"), format="%H:%M")
p<-ggplot(data=foo,aes(x=time,y=rm)) + geom_point()

p<-p+labs(x="Hour")
p<-p+labs(y = "std")

p<-p+theme_bw()
p<-p+theme(axis.line = element_line(colour = "black"),
 panel.grid.major = element_blank(),
 panel.grid.minor = element_blank(),
 panel.border = element_blank(),
 panel.background = element_blank()) 

如何在 x 轴上接收,它们小时形式的标签将是 ex。每两个小时?我尝试过了: p+scale_x_datetime(breaks=date_breaks('2 hour'),labels=date_format('%H:%M'))

但它给了我“错误:输入无效:time_trans 仅适用于 POSIXct 类的对象”。

我有一个包含数据的大 .csv 文件。所以,我不能把它放在这里。我有两列和很多行。它们看起来像:

日期 rm

2017-06-23 00:10 1.127

2017-06-23 00:10 1.26339

2017-06-23 00:20 1.12279

【问题讨论】:

  • 我可以帮助你,但我需要你的数据
  • 我有一个很大的 .csv 文件,据我所知,我无法在此处附加它。我有很多这样的行:2017-06-23 00:10 1.127
  • 看我的答案...

标签: r ggplot2


【解决方案1】:

好的,我测试一下:

requires(dplyr)

    b <- expand.grid(test_date = seq(ymd_hms("2017-04-27 22:00:00"), ymd_hms("2017-05-11 18:00:00"), by = "hour"))
    b <- b%>%mutate(x = seq(1:333))

ggplot(b, aes(x=test_date, y=x)) + geom_line() +
  scale_x_datetime(date_breaks = "2 hours", date_labels = "%H:%M")

我创建了一个包含 2 列的表,第一列是格式为 POSIXct 的日期时间,第二列是数字。你应该写:

ggplot(data = foo,aes(x = time,y = rm)) + geom_point() + scale_x_datetime(date_breaks = "2 hours", date_labels = "%H:%M")

【讨论】:

  • 我需要 str(foo)
  • 我没能检查你的例子,因为它给了我错误“找不到函数“%>%”。在我身上它不起作用。错误和我的问题一样“错误:无效输入:time_trans 仅适用于 POSIXct 类的对象”。str(foo) 给出:'data.frame':143 个变量,共 3 个变量:$ 日期:143 个级别的因子“2017-06-23 00 :10",..: 1 2 3 4 5 6 7 8 9 10 ... $ rm: num 1.127 1.123 1.03 0.969 0.966 ... $ time : chr "00:10" "00:20" "00:30 " "00:40" ...
  • 试试这个: foo$date
  • 'data.frame':143 obs。 4 个变量:$ 日期:因子 w/143 个级别“2017-06-23 00:10”,..:1 2 3 4 5 6 7 8 9 10 ... $ rm:num 1.127 1.123 1.03 0.969 0.966 .. . $ 小时 : chr "00:10" "00:20" "00:30" "00:40" ... $ 日期:POSIXct,格式:NA NA ...
  • 你说你有 2 列,日期和数字。您应该执行以下操作:1)不要随时间创建新列。 2)在一个明确的数据帧上使用这个 foo$date
【解决方案2】:
install.packages("lubridate")
library(lubridate)

foo$time <- hm(foo$time)

p + scale_x_datetime(date_breaks = "2 hours", date_labels = "%H:%M")

请用这个替换并检查错误是否仍然存在。

【讨论】:

  • 你能检查一下 foo$time 的类吗
  • 这是一个“字符”
  • 当我写edit()时,我得到了很多包含很多东西的行,所以我不知道接下来要做什么。那里没有“错误”一词。
  • 我认为您需要使用示例数据更新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多