【发布时间】:2013-03-04 20:45:47
【问题描述】:
我正试图弄清楚如何用ggplot2 和R 做一些看起来应该真的简单的事情。这太简单了……我一生都无法弄清楚如何去做。我确定答案是在 ggplot 文档中盯着我看,但我无法……找到它。所以。我来了。
我经常有很多这样的数据集:
tdf <- data.frame('datetime' = seq(from=as.POSIXct('2012-01-01 00:00:00'),
to=as.POSIXct('2012-01-31 23:59:59'), by=1))
tdf$variable <- rep(c('a','b','c'), length.out=length(tdf$datetime))
tdf$value <- sample(1:10, length(tdf$datetime), replace=T)
> head(tdf)
datetime variable value
1 2012-01-01 00:00:00 a 7
2 2012-01-01 00:00:01 b 3
3 2012-01-01 00:00:02 c 7
4 2012-01-01 00:00:03 a 8
5 2012-01-01 00:00:04 b 2
6 2012-01-01 00:00:05 c 3
也就是说:我有一个分类变量(一个因子)、该变量的值以及记录所述观察的时间戳。我想为给定时间“桶”绘制每个分类变量的值的总和——最好使用ggplot2。我想这样做,而不必在可视化之前预先聚合它——也就是说,我真的想要保持数据集不变并将参数传递给ggplot2 以按时聚合它的灵活性。然而,我完全一头雾水。 geom_line 上的文档说要使用 stat='identity' 来获得价值总和,但是一旦我这样做了,我就不能再定义任何类型的 bin。如果我使用stat_summary,我经常根本不会得到情节。我得到的最接近的是:
tdf$variable <- factor(tdf$variable)
vis <- ggplot(tdf, aes(x=datetime, y=value, color=variable))
vis <- vis + geom_line(stat='identity')
vis <- vis + scale_x_datetime()
...至少打印一个图,其中一行对应于每个因子的值...按秒。如果不做大量工作来预先聚合数据,我无法将它发送到bin sum(value) 操作,例如一个小时、一天或一周。
帮助?
编辑:向 R 会话因该测试数据而窒息的任何人表示歉意。我把它剪掉了。
【问题讨论】:
-
你考虑过使用stat_function吗?它会平滑数据而不是分箱,但这实际上可能更适合您的目的(分箱之间没有急剧过渡)
-
(-1) 你真的应该考虑提供“更小”的数据进行测试。你杀死了我的 R 会话。
-
@DavidRobinson -- 没看过那个 -- 我会试一试。谢谢!
-
@Arun -- 抱歉。我已经收紧了。
-
@DavidRobinson 好吧,我对 stat_function 感到很困惑;我开始认为我只是不明白
ggplot2文档是如何编写的。有没有机会举个例子?