r - 如何在 ggplot2 中每小时绘制 Posix 数据?

标签 r ggplot2 posixct

我有一个数据框:

bvar time
0.000000000 2003-03-14 19:00:00
0.200000000 2003-03-14 20:00:00
0.044000000 2003-03-14 21:00:00

这里,时间是 POSIXct:

str(tsdat$time)
 POSIXct[1:193], format: "2003-03-14 19:00:00" 

当我绘制它时,我想通过每小时显示来控制 x 轴:

ggplot(ts) +
  geom_line(aes(x=time, y=bvar))+
  theme(axis.text.x = element_text(angle = 0, hjust = 1))+
  scale_x_date(labels=date_format("%Y %H:%M")) + 
  ylab('BVAR [mm]')

错误

错误:输入无效:date_trans 仅适用于 Date 类的对象

我怎样才能每小时完成这个?在另一个问题中,他们建议使用 as.Date。但这对我不起作用,因为我的数据只有 2 天。

最佳答案

我认为您可以对 POSIXct 使用 scale_x_datetime 而不是 scale_x_date。要在 x 轴上获取每小时休息时间,还需添加 breaks = "1 hour"

library(ggplot2)
library(scales)

ggplot(ts) +
  geom_line(aes(x=time, y=bvar))+
  theme(axis.text.x = element_text(angle = 0, hjust = 1))+
  scale_x_datetime(labels=date_format("%Y %H:%M"), breaks = "1 hour") + 
  ylab('BVAR [mm]')

输出

plot using scale_x_datetime

数据

ts <- structure(list(bvar = c(0, 0.2, 0.044), time = structure(c(1047690000, 
1047693600, 1047697200), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = c(NA, 
-3L), class = "data.frame")

关于r - 如何在 ggplot2 中每小时绘制 Posix 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61406872/

相关文章:

r - 随着时间的推移累计金额

r - 有没有一种更优雅的方法将 88 级变量折叠为 5 级变量?

r - R 中的函数式编程

R dplyr 方法变异变量(如果存在)

r - 一个州等值线图中的县

r - 聚合函数和时区

r - 如何从字符串变量创建文本连接?

r - 不想显示 ggplot2 中小刻度的所有标签

r - 保存/导出 ggplot2 数据,而不是绘图本身

r - data.table中POSIXct的高效对比