1

我不定期地测量了一个带有时间戳的现象的观察结果:

2013-01-03 00:04:23
2013-01-03 00:02:04
2013-01-02 23:45:16
2013-01-02 23:35:16
2013-01-02 23:31:56
2013-01-02 23:31:30
2013-01-02 23:29:18
2013-01-02 23:28:43
...

现在我想在 x 轴上绘制这些点并对它们应用核密度函数,这样我就可以使用各种带宽直观地探索时间密度。应该会出现这样的结果,尽管下面的示例没有使用 x 轴标记;我想要标签,例如,特定日期(1 月 1 日、1 月 5 日等):

核密度图

然而,重要的是,测量点本身在图中是可见的,如上所示。

4

2 回答 2

2
#dput
df <- structure(list(V1 = structure(c(2L, 2L, 1L, 3L, 1L, 4L, 5L, 4L), .Label = c("2013-01-02", "2013-01-03", "2013-01-04", "2013-01-05", "2013-01-11"), class = "factor"), V2 = structure(c(1L, 3L, 8L,  4L, 7L, 6L, 5L, 2L), .Label = c(" 04:04:23", " 06:28:43", " 10:02:04", " 11:35:16", " 14:29:18", " 17:31:30", " 23:31:56", " 23:45:16"), class = "factor")), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, -8L))

使用ggplot,因为它可以对您的情节进行细粒度控制。使用不同的层进行测量和密度本身。

df$tcol<- as.POSIXct(paste(df$dte, df$timestmp), format= "%Y-%m-%d %H:%M:%S")
library(ggplot2)
measurements <- geom_point(aes(x=tcol, y=0), shape=15, color='blue', size=5)
kde <- geom_density(aes(x=tcol), bw="nrd0")
ggplot(df) + measurements +  kde

导致 在此处输入图像描述

现在,如果您想进一步调整 x 轴标签(因为您希望标记每个单独的日期,您可以使用该scales包。我们将使用scale_x_date但仅包含“日期”

library(scales)
df$tcol <- as.Date(df$tcol, format= "%Y-%m-%d %H:%M:%S")
xlabel <- scale_x_date(labels=date_format("%m-%d"), breaks="1 day")
ggplot(df) + xlabel + measurements +  kde

这给出了: 在此处输入图像描述

请注意,时间似乎已经四舍五入。

希望这可以帮助您继续前进。

于 2013-05-24T19:32:15.697 回答
0

将您的值转换为 POSIXct,转换该数字(即 UNIX 时间中的秒数),然后应用您的内核密度函数。如果z是您的时间戳向量:

z2 <- as.POSIXct(z, "%Y-%m-%d %H:%M:%S", tz="GMT")
plot(density(as.numeric(z2)))

然后添加带有标签的 x 轴会相对容易axis

于 2013-05-24T09:17:59.090 回答