【问题标题】:Align a time grid in R [duplicate]在R中对齐时间网格[重复]
【发布时间】:2017-04-07 17:24:14
【问题描述】:

作为多年的 gnuplot 用户,我对 R 试图将基于时间的值的网格与 x 轴标签对齐,即人类时间的一些“合理”倍数(分钟、小时)感到绝望、天等)。在 Gnuplot 中,它或多或少是自动的……

例如我有这些时间值(我仍然无法找到如何正确使用dump(),所以一个没有测量数据的简化示例):

> range(perf$time)
[1] "2016-11-22 02:26:02 CET" "2016-11-22 04:02:12 CET"
> length(perf$time)
[1] 49
> plot(perf$time, 1:length(perf$time))
> grid()
>

绘图窗口如下所示: 因此,您会看到“3:00”与网格线匹配,但没有其他值。我试图使行数匹配,但无法正确对齐。没有简单的解决办法吗?

“沿日期刻度线放置网格”的解决方案都没有使用grid(),那么grid() 是不是没用?

【问题讨论】:

  • “沿日期标记放置网格”中的答案都不是“优雅”的解决方案恕我直言
  • 接受的答案使用grid

标签: r plot time grid alignment


【解决方案1】:

如果您使用时间相关数据,我建议您使用 xts 包。它使所有格式都开箱即用。

library(xts)
perf.xts <- xts(1:length(perf$time), perf$time)
plot(perf.xts, type="p")

如果没有 xts 包,您也可以用更棘手的方式解决问题。您需要抑制 x 网格。 POSIXct 上课时间是大整数,我认为 grid() 使用这些数字来计算行位置。如果您将时间与 POSIXct 类一起使用,则下面的示例有效。 (对于其他时间类,找到不同的轴方法。)

plot(perf$time, 1:length(perf$time))
grid(nx = NA, ny = NULL)
axis.POSIXct(1, perf$time, tck=1, lty = "dotted", col = "lightgray")

【讨论】:

  • 抱歉,必须为网格输入显式数据是简单的解决方案,就像手动添加轴一样。没有优雅的解决方案(与 base 一起使用)吗?
  • @Windl 你厌倦了第一个解决方案吗?那是绝对自动的。您需要将数据(可能是 data.frame)转换为 xts。您没有提供示例数据集,但值得注意it works with numerical columns.
  • @Windl 啊!抱歉,我用基本图形修改了解决方案。试试看!或者您可以在duplicated question 中查看不同的解决方案。
猜你喜欢
  • 2013-12-26
  • 2018-01-23
  • 2019-04-24
  • 2021-04-08
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
相关资源
最近更新 更多