【问题标题】:how, in R, to plot time of day versus calendar date如何在 R 中绘制一天中的时间与日历日期
【发布时间】:2011-05-20 19:29:43
【问题描述】:

我很遗憾在互联网上搜索了几个小时关于这个简单问题的信息后来到这里发帖。

我有几个要在 R 中绘制的数据集,每个数据集包含两列数据:时间、日期。我通过 Rgui 在 Windows 计算机上使用 R 2.11.0。

时间是观察事件的“一天中的时间”。例如,它被识别为:

Factor w/ 87 levels "5:53","5:54",..: 84 85 85 85 86 ...

日期为日历日期,识别为:

Class 'Date'  num [1:730] 13879 13880 13881 13882 13883 ...

时间值以 24 小时制、h:mm 或 hh:mm 格式记录。日期值显示为 yyyy-mm-dd。

我想绘制时间(y 轴)与日期(x 轴)的关系。

使用

plot(date,time)

给出了一个看起来准确的图,但 y 轴被标记为数值因子值(大约 0 到 90),而不是因子变量的所需的时间顺序水平。 x 轴以所需的人类可读格式进行标记。

我该如何纠正这个问题? R中是否有“时间”格式可以将“时间”变量转换为?我随后也想对时间值进行算术运算,并且不介意必须携带一列用于绘图的值和一列用于数学的值。

我在网上遇到了几个在 R 中操作(日期+时间)变量的示例,并将它们转换为不同的格式。我不认为这是我的问题,因为我有单独的时间和日期字段,并且想将一个与另一个进行对比。

在此先感谢您的建议,或您对网络可访问资源的指示(我所在的位置没有合适的图书馆或书店)。

【问题讨论】:

    标签: r time format plot


    【解决方案1】:

    可能有更简单的方法可以做到这一点,但您始终可以自己标记 y 轴。调整下面的 ticksAt 向量,找到适合您数据的内容。

    Data <- data.frame(date=Sys.Date()+1:10,time=paste(5,41:50,sep=":"))
    with(Data, plot(date,time,yaxt="n"))
    ticksAt <- c(1,3,5,7,9)
    axis(2, at=ticksAt, labels=as.character(Data$time)[ticksAt])
    

    ?plot.zoo 有一些很好的例子来说明如何创建漂亮的轴注释,尽管其中一些可能是特定于动物园的。 ?par 也是不错的资源。

    【讨论】:

    • 我想知道是否只是在 y 轴上进行“虚拟标记”是我达到理想目标的最直接方式。我曾希望有一种方法可以绘制时间值本身(“5:53”、“5:54”等),而不是来自因子的数字对应物(84、85;如原始问题所示) ;部分原因是不同的数据集需要个性化的轴注释。感谢您提供清晰、直接的示例。对于这方面的即时工作,我赞成您的解决方案形式。
    【解决方案2】:

    ts 和 timeSeries 是两个不错的选择。
    看看
    Related

    【讨论】:

    【解决方案3】:

    假设您有两个向量,一个名为“dt”的 Date 类,另一个名为“tm”的因子:

     x <- paste(as.character(dt[1:2]), as.character(tm))
     strptime(x, "%Y-%m-%d %H:%M")
    ## [1] "2008-01-01 05:53:00" "2008-01-02 05:54:00"
    class(strptime(x, "%Y-%m-%d %H:%M"))
    ##  [1] "POSIXt"  "POSIXlt"
    

    【讨论】:

    • 具有单独的时间和日期变量是这个问题的一个组成部分,因为感兴趣的主题是调查不同事件的一天中的时间在日历年的过程中如何变化。尽管能够将它们转换为 POSIX,但恐怕我没有掌握将这两者组合成一个对象的价值。
    • 与其为时间对象(我不知道其存在的类)创建自己的函数,我认为您可以使用 TimeDateClass 来创建日期时间变量和派生变量之间的差异之一截断到午夜或创建一个辅助变量,它的所有日期部分都重新分配给一个公共日期。然后,您就可以使用内置的格式功能为您的 y 轴标记。
    • 我明白了。你是对的,这可能对时间值的算术有用。我忽略了这个好处,仍然停留在获得一种直接绘制值的点上,这些值将被识别并排列为一天中的时间,类似于在基本安装中获得 R 中识别的仅日期值的能力。感谢您的重定向。
    猜你喜欢
    • 2011-06-14
    • 2019-08-14
    • 2020-10-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多