一天中每次观察绘制一个点
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' 变量(使用您喜欢的任何方法,dplyr
、data.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 ~ .)
我的数据有 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' 变量(使用您喜欢的任何方法,dplyr
、data.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 ~ .)