別のアプローチを試みて、次のプロットを試しました。ユーザー メッセージ数の分布を示す毎日の箱ひげ図と、ユーザーあたりの平均メッセージ数を結ぶ線です。ターゲットプロットは次のとおりです。

@Sacha Epskamp の方法を使用してデータを生成することから始めます。意図したプロットのために何かを得るために、大きなデータセットを生成します
library("ggplot2")
library("lubridate")
# This code from Sacha Eskamp
# http://stackoverflow.com/a/10269840/1290420
# Generate a data set
set.seed(1)
start <- strptime("2012-01-05 00:00:00",
format="%Y-%m-%d %H:%M:%S")
end <- strptime("2012-03-05 00:00:00",
format="%Y-%m-%d %H:%M:%S")
df <- data.frame(message.id = 1:10000,
user.id = sample(1:30,10000,
TRUE,
prob=1:30),
message.date = seq(start,
end,
length=10000)
)
次に、データフレームをプロットに適した形状にするのに苦労します。plyr
教祖はこれを大幅に改善できると確信しています。
# Clean up the data frame and add a column
# with combined day-user
df$day <- yday(df$message.date)
df <- df[ df$day!=65, c(2,4) ]
df$day.user <- paste(df$day, df$user.id, sep="-")
# Copy into new data frame with counts for each
# day-user combination
df2 <- aggregate(df,
by=list(df$day,
df$day.user),
FUN="length"
)
df2 <- df2[,c(1,2,3)]
names(df2) <- c("day", "user", "count")
df2$user <- gsub(".+-(.+)", "\\1", df2$user)
次に、プロットを描くのは簡単な部分です。
p <- ggplot(df2,
aes(x=day,
y=count))
p <- p + geom_boxplot(aes(group=day), colour="grey80")
p <- p + stat_summary(fun.y=mean,
colour="steelblue",
geom="line",
size=1)
p <- p + stat_summary(fun.y=mean,
colour="red",
geom="point",
size=3)
p