【问题标题】:How to plot date-hour on x-as in R?如何在 R 中的 x 上绘制日期时间?
【发布时间】:2020-10-01 03:56:51
【问题描述】:

我正在努力在 R 中绘制时间序列。我有定期出院数据。每 15 分钟记录一次新的观察结果。所以我的数据是日期和时间戳(小时和分钟)的形式。 我只是想及时绘制放电数据的演变。在 x 轴上,我希望有日期和月份的时间。但当然需要根据日期(日-月-年)和时间(小时和分钟)绘制观察结果。

我找到了 ggplot、strptime、POSIXct、as.DATE 等可以使用,但是我看不到森林的树木......(我在 R 中很新)

示例:

discharge dateandtime 5,8152616 1/03/2020 0:00 5,6835847 1/03/2020 6:30 5,5535848 1/03/2020 13:00 5,5535789 1/03/2020 19:30 5,6835847 2/03/2020 0:00 5,4250033 2/03/2020 6:30 5,8152616 2/03/2020 13:00 5,6835847 2/03/2020 19:30 5,5535855 3/03/2020 0:00 5,5535855 3/03/2020 6:30 5,6835847 3/03/2020 13:00

到目前为止,我得到了这个:

testdata <-read.table("testdischargedata.txt", header = TRUE, sep = "\t", dec=",") dateandtime <- as.POSIXct(testdata$dateandtime, format= "%d/%m/%Y %H:%M") plot(dateandtime,testdata$discharge, type = "p")

然后剧情如下:First plot attempt, x axis mentions the written days

x-asis 提到了所写的日期(所以周一、周二等)...

然后,如果我使用此代码进行绘图:

plot(testdata$dateandtime, testdata$discharge, type = "p") axis.POSIXct(1, at=testdata$dateandtime, labels=format(testdata$dateandtime, "%d/%m")

然后我得到了这个情节:Second plot attempt

所以 x 轴现在更好了,它提到了日期和小时,但我只想要日期和月份。而且观察结果的绘制方式也很奇怪。

如何改进此代码?我做错了什么?

【问题讨论】:

  • 你好谎言,欢迎来到 SO。你能分享你到目前为止所尝试的吗?我们需要看看您是如何设置情节的,以便我们为您提供帮助。
  • @Jan ,我编辑了我的问题并补充说我到目前为止。

标签: r datetime plot


【解决方案1】:

这是你需要的吗?你实际上很接近。我不必改变太多。我注意到您没有将 POSIX 强制转换的结果分配给数据框。当您稍后在axis.POSIX 中使用testdata$dateandtime 时,格式仍然错误。

接下来您要做的是在plot 命令中禁止绘制 x 轴。如果没有,您将获得两组轴标签。在第二个命令中,您可以按照自己的方式添加轴。

testdata <-read.table("testdischargedata.txt", header = TRUE, sep = "\t", dec=",")
testdata$dateandtime <- as.POSIXct(testdata$dateandtime, format= "%d/%m/%Y %H:%M") 
plot(testdata$dateandtime, testdata$discharge, type = "p", xlab="Day", xaxt = "n")
axis.POSIXct(1, at=testdata$dateandtime, labels=format(testdata$dateandtime, "%d/%m"))

【讨论】:

  • 好的,非常感谢!这已经很有帮助了!但是有没有办法避免每次观察都增加一天?所以现在这一天被提到了 4 次(每天 4 次观察)。我该如何适应?最好每天只进行四次观察,这样就只提到了这一天。
  • 我发现在 x 轴上只显示日期和月份,通过使用 axis.POSIXct 函数中的序列,然后当然是天。 plot(datamaart$dateandtime, datamaart$discharge, type = "l", xaxt = "n", xlab = "Date", ylab = "Discharge (l/s)", col="red") r &lt;- as.POSIXct(round(range(datamaart$dateandtime), "hours")) axis.POSIXct(1,at=seq(r[1], r[30], by = "day"), format = "%d %b") 但是我做错了什么,因为在这段代码之后得到了错误消息:Error in seq.int(0, to0 - from, by) : 'to' must be a finite number 你能帮帮我吗?
  • 检查r。它只有两个值。结果r[30]返回NA。如果您使用axis.POSIXct(1, at = seq(r[1], r[2], by = "day"), format = "%d %b"),那么我相信这就是您想要的,对吧?
猜你喜欢
  • 1970-01-01
  • 2017-04-11
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多