【问题标题】:Plotting data against time in R在 R 中根据时间绘制数据
【发布时间】:2012-04-13 18:44:52
【问题描述】:

我有一个数据框,其中一列作为日期/时间(内部存储为数字),其他列作为数字/整数,我想根据日期/时间绘制数据。

使用以下内容填充数据框中的日期/时间。

as.POSIXct(strptime(time, '%H:%M:%S %p %m/%d/%Y',tz='GMT')) 

class(table$time)numeric

  1. 如何在 x 轴上绘制数据并将其显示为某种格式的可读日期时间。
  2. 如何绘制行子集而不是所有行 例如:dateTime1dateTime2 之间的行,其中 dateTime1dateTime2 是以特定格式给出的日期。

【问题讨论】:

  • 您可以展示您的数据框的样子吗?我很难理解您的 time 是如何同时是数字和 '%H:%M:%S %p %m/%d/%Y' 形式的。

标签: r datetime plot ggplot2


【解决方案1】:

您也可以使用ggplot2,更具体地说是geom_pointgeom_line(请注意,我使用来自@plannapus 的示例数据):

require(ggplot2)
theme_set(theme_bw()) # Change the theme to my preference
ggplot(aes(x = time, y = variable), data = data) + geom_point()

或使用线几何:

ggplot(aes(x = time, y = variable), data = data) + geom_line()

ggplot2 自动识别 x 轴的数据类型是日期,并相应地绘制轴。

【讨论】:

  • +1 确实比我的方便。如果需要,是否还有一种方法可以控制标签的格式或它们的位置?
  • 是的,您可以使用scale_x_datescale_x_datetime 来调整音阶。有关一些示例,请参阅他们的文档。
【解决方案2】:

这是一些虚拟数据:

data <- structure(list(time = structure(c(1338361200, 1338390000, 1338445800, 1338476400, 1338532200, 1338562800, 1338618600, 1338647400, 1338791400, 1338822000), class = c("POSIXct", "POSIXt"), tzone = ""), variable = c(168L, 193L, 193L, 201L, 206L, 200L, 218L, 205L, 211L, 230L)), .Names = c("time", "variable"), row.names = c(NA, -10L), class = "data.frame")
data
              time variable
1  2012-05-30 09:00:00      168
2  2012-05-30 17:00:00      193
3  2012-05-31 08:30:00      193
4  2012-05-31 17:00:00      201
5  2012-06-01 08:30:00      206
6  2012-06-01 17:00:00      200
7  2012-06-02 08:30:00      218
8  2012-06-02 16:30:00      205
9  2012-06-04 08:30:00      211
10 2012-06-04 17:00:00      230

要在轴上显示日期和时间,您可以使用函数axis.POSIXct

plot(data, xaxt="n")
axis.POSIXct(side=1, at=cut(data$time, "days"), format="%m/%d") 

您可以使用at 控制刻度的位置(与常规函数axis 不同的是,这里将提供POSIXct 类的对象)并使用format 控制它们的显示方式。

就子集而言,只要您的 dateTime1 和 dateTime2 对象也是 POSIXct 对象,您就可以像进行任何其他类型的子集一样进行操作。

dateTime1 <- strptime("00:00 05/31/2012", format="%H:%M %m/%d/%Y")
dateTime2 <- strptime("3 Jun 2012 05-30", format="%d %b %Y %H-%M")
data[data$time < dateTime2 & data$time > dateTime1, ]
                 time variable
3 2012-05-31 08:30:00      193
4 2012-05-31 17:00:00      201
5 2012-06-01 08:30:00      206
6 2012-06-01 17:00:00      200
7 2012-06-02 08:30:00      218
8 2012-06-02 16:30:00      205

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多