r - 使用 ggplot2 更改时间序列上的 x 滴答数

标签 r ggplot2 time-series graphing

我正在尝试绘制时间序列 x_output看起来像这样:

              timestamp   city wait_time weekday     time
    2015-07-14 09:00:00 Boston       1.6 Tuesday 09:00:00
    2015-07-14 09:01:00 Boston       1.8 Tuesday 09:00:00
    2015-07-14 09:02:00 Boston       2.4 Tuesday 09:00:00
    2015-07-14 09:03:00 Boston       2.9 Tuesday 09:00:00
    2015-07-14 09:04:00 Boston       4.5 Tuesday 09:00:00
    2015-07-14 09:05:00 Boston       5.6 Tuesday 09:00:00

这是我如何绘制它:
brks <- seq(1, length(x_output$timestamp), 10)
brks_labels <- x_output[brks, ]

p <- ggplot(x_output, aes(x=as.character(timestamp), y=wait_time, group=city)) + geom_line(aes(color=city), size=1.5) + theme(axis.text.x = element_text(angle = 90, hjust=1), legend.position = "bottom") + labs(x=NULL, y="Waiting time (minutes)") + scale_x_discrete(breaks = brks, labels = brks_labels)
print(p)

我必须使用 x_output$timestamp作为一个字符(即分类变量),否则,ggplot2 认为它是连续的,并且包括没有值的白色空白区域。

然而,出于某种原因,scale_x_discrete似乎没有工作。我相信我对休息的输入是正确的,但是,标签现在没有显示。有谁知道为什么?这是什么情节:

enter image description here

我试图简单地让标签在 x 轴上每 10 个时间戳出现一次(这就是我将中断放入数组的原因 brks )。

最佳答案

您的休息时间必须与您的 aes(x= 类型相同,即 scale_x_discrete(breaks=x_output$timestamp[brks])作品。

但是请注意,将您的时间戳转换为这样的分类时间戳在时间尺度上可能不准确 - 如果时间戳跳过 2 分钟而其余的跳过 1 这将不会反射(reflect)在您的图表上。

我认为您最好将 X 保留为日期时间,并使用 + scale_x_datetime(breaks=date_breaks("10 mins")) .如果您有多个由无数据区域分隔的时间窗口,您可以使用一个变量来指示每行属于哪个“窗口”,以及 facet_wrap并排绘制窗口,这样您就可以在保留 x 轴比例的同时跳过间隙。例如。你可以facet_wrap来自 weekday如果您的数据每天仅用于特定窗口。

关于r - 使用 ggplot2 更改时间序列上的 x 滴答数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31441690/

相关文章:

r - caret 包中的 train() 返回有关名称和 gsub 的错误

r - 在 R 中创建 sumif 函数的等效项

r - 将连续变量切割为 r 中的分类变量(以单独的值作为组)

c# - 如何通过 Web 服务获取当前天气

r - 如何根据R中的时间间隔对数据进行分组

r - 使用 match.arg() 匹配默认值向量,有或没有错误 [R]

r - 如何增加ggplot中*旋转* y轴上文本和标题之间的距离?

r - 每个人具有多个/堆叠变量的热图

r - 使用 ggplot2 的累积直方图

python - 这个时间序列是否平稳?