一天中每次观察绘制一个点

Plot one dot per each observation in a day

我的数据有 2 个变量,一个时间戳和一个组。像这样:

df.plot <- structure(list(Timestamp = structure(c(1441814593, 1441818193, 
                                                  1441821398, 1441821449, 1441828375, 1441837436, 1441843661, 1441873127, 
                                                  1441885583, 1441966341, 1441985621, 1442048926, 1442321691, 1442329081, 
                                                  1442349761, 1442408140, 1442417679, 1442508871, 1442513339, 1442514010, 
                                                  1442525088, 1442562304, 1442564744, 1442569290, 1442569482, 1442571416, 
                                                  1442606687), tzone = "UTC", class = c("POSIXct", "POSIXt")), 
                          group = c("A", "B", "B", "B", "B", "B", "B", "A", "B", "A", 
                                    "B", "A", "A", "A", "B", "B", "B", "B", "A", "B", "B", "A", 
                                    "A", "A", "A", "B", "A")), class = "data.frame", .Names = c("Timestamp", 
                                                                                                "group"), row.names = c(NA, -27L))

时间戳中有第二个,但我只想使用日期。即,将2015-09-0916:03:13转换为2015-09-09.

对于每个日期,我想绘制一个点。如果我必须在同一日期进行观察,我想在彼此之上绘制一个点。另外,我想为 group 变量使用分面。

我能够做与我想要的类似的事情:

ggplot(df.plot, aes(x=Timestamp)) + 
  geom_dotplot(method="histodot") + 
  facet_grid(group ~ .)

如何让 ggplot 只使用日期,如何更改 y 轴的比例以显示计数?

从您的 Timestamp 创建一个 date 列,并照常绘制

df.plot$date <- as.Date(df.plot$Timestamp, format="%Y-%m-%d %H:%M:%s")

ggplot(data=df.plot, aes(x=date)) +
    geom_dotplot(method="histodot") + ylim(0,7) +
    facet_wrap(~group)

当然,您实际上不必创建新变量,您可以在 ggplot 调用

中完成所有操作
ggplot(data=df.plot, aes(x=as.Date(Timestamp))) +
    geom_dotplot(method="histodot") + ylim(0,7) +
    facet_wrap(~group)

为了获得计数,您可以修改数据以包含 'count' 变量(使用您喜欢的任何方法,dplyrdata.table 等)

这里我用的是data.table

library(data.table)
setDT(df.plot)

df.plot[, date := as.Date(Timestamp)]
df.plot[, nCount := seq(1:.N), by=.(date, group)]

ggplot(data=df.plot, aes(x=date, y=nCount)) +
    geom_point() +
    facet_wrap(~group)
ggplot(df.plot, aes(x=as.Date(Timestamp))) + 
  geom_dotplot(binwidth=1) +
  coord_fixed(ratio=1) + 
  ylim(0,7) +
  facet_grid(group ~ .)