【问题标题】:ggplot2 and cumsum()ggplot2 和 cumsum()
【发布时间】:2013-03-23 23:35:13
【问题描述】:

我有一组 UNIX 时间戳和 URI,我正在尝试绘制每个 URI 的累积请求数。我设法使用一个虚拟列一次为一个 URI 做到这一点:

x.df$count <- apply(x.df,1,function(row) 1) # Create a dummy column for cumsum
x.df <- x.df[order(x.df$time, decreasing=FALSE),] # Sort
ggplot(x.df, aes(x=time, y=cumsum(count))) + geom_line()

但是,在我的情况下,这将产生大约 30 个图。

ggplot2 确实允许您将多条线绘制成一个图(我从here 复制了这段代码):

ggplot(data=test_data_long, aes(x=date, y=value, colour=variable)) +
    geom_line()

问题在于,这样一来,cumsum() 就会一直依赖。

有人有想法吗?

【问题讨论】:

  • 您能否提供一个小的示例数据集来说明您所描述的内容?
  • 这听起来像是 plyrdata.table 的工作。按 URI 拆分数据,然后在每个部分上将数据拆分到您的 cumsumdata.table(x); x[, list(count=.I), by=URI] 或者类似的东西...

标签: r ggplot2 cumsum


【解决方案1】:

这是一个测试数据,它首先使用plyrtransform 计算累积和,然后使用ggplot2 将该数据应用于绘图:

set.seed(45)
DF <- data.frame(grp = factor(rep(1:5, each=10)), x=rep(1:10, 5))
DF <- transform(DF, y=runif(nrow(DF)))

# use plyr to calculate cumsum per group of x
require(plyr)
DF.t <- ddply(DF, .(grp), transform, cy = cumsum(y))

# plot
require(ggplot2)
ggplot(DF.t, aes(x=x, y=cy, colour=grp, group=grp)) + geom_line()

【讨论】:

  • 对不起,我不明白您所说的样本数据是什么意思,我对 R 还是很陌生。不过,您的绘图实际上并没有显示累积和。线条必须是单调的。 (顺便说一句:你不需要 cumsum 来创建那种线条,ECDF 可以完成这项工作。)
  • 我生成了一些示例数据,正如您提供的一样(请参阅@joran 的评论)。我猜你还在看旧情节?这个单调的并且是累积和。如果您想查看刚刚添加的点,+ geom_point().
  • 您好阿伦,感谢您的帮助。该示例有效,但我根本没有得到实际数据的单调图。所以我开始玩弄这个例子中的数字,我认为大数字有问题。你能重现这个吗?
  • @Bob 你有责任提供一个可重现的例子。
  • 我想我已经发现我的数据存在问题。如果您的数据未按升序排序,您似乎不会得到单调图。
猜你喜欢
  • 2011-11-16
  • 2015-10-29
  • 2022-01-24
  • 2018-10-18
  • 2020-01-31
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多