如何使用ggplot绘制多个ecdf图?

6

我有一些格式如下的数据:

    2     2
    2     1
    2     1
    2     1
    2     1
    2     1
    2     2
    2     1
    2     1
    2     1
    2     2
    2     2
    2     1
    2     1
    2     2
    2     2
    2     1
    2     1
    2     1
    2     1
    2     1
    2     1
    2     1
    3     1
    3     1
    3     1
    3     3
    3     2
    3     2
    4     4
    4     2
    4     4
    4     2
    4     4
    4     2
    4     2
    4     4
    4     2
    4     2
    4     1
    4     1
    4     2
    4     3
    4     1
    4     3
    6     1
    6     1
    6     2
    7     1
    7     1
    7     1
    7     1
    7     1
    8     2
    8     2
    8     2
    8     2
    8     2
    8     2
   12     1
   12     1
   12     1
   12     1
   12     1

我正在尝试为第一列中的每个不同值绘制此数据集的ecdf。因此,在这种情况下,我希望在一个图表上绘制7条ecdf曲线(其中一条是所有第一列中具有2的点的,一条是所有第一列中具有3的点的等等...)。对于一列,我可以使用以下方法绘制ecdf:

data = read.table("./test", header=F)
data1 = data[data$V1 == 2,]
qplot(unique(data1$V2), ecdf(data1$V2)(unique(data1$V2)), geom='step')

但我不知道如何作图呈现多条曲线,请给些建议。

请提供一个可重现的示例。即使模拟您的数据,我也无法使您现有的尝试起作用。 - Ari B. Friedman
抱歉!我在语句中打错了一个字。已更新为可用的语句集合。 - Legend
2个回答

14

如果你离开qplot()函数,会更容易实现:

library(plyr)
library(ggplot2)
d.f <- data.frame(
  grp = as.factor( rep( c("A","B"), each=40 ) ) ,
  val = c( sample(c(2:4,6:8,12),40,replace=TRUE), sample(1:4,40,replace=TRUE) )
  )
d.f <- arrange(d.f,grp,val)
d.f.ecdf <- ddply(d.f, .(grp), transform, ecdf=ecdf(val)(val) )

p <- ggplot( d.f.ecdf, aes(val, ecdf, colour = grp) )
p + geom_step()

您还可以轻松地添加facet_wrap用于多个组,并使用xlab/ylab添加标签。

multiple ecdfs

d.f <- data.frame(
  grp = as.factor( rep( c("A","B"), each=120 ) ) ,
  grp2 = as.factor( rep( c("cat","dog","elephant"), 40 ) ) ,
  val = c( sample(c(2:4,6:8,12),120,replace=TRUE), sample(1:4,120,replace=TRUE) )
  )
d.f <- arrange(d.f,grp,grp2,val)
d.f.ecdf <- ddply(d.f, .(grp,grp2), transform, ecdf=ecdf(val)(val) )

p <- ggplot( d.f.ecdf, aes(val, ecdf, colour = grp) )
p + geom_step() + facet_wrap( ~grp2 )

使用两个分组变量


9

自2012年底以来,ggplot2包含了一个专门用于打印ecdfs的函数:ggplot2文档

这里的示例甚至比Ari的好解决方案还要短:

df <- data.frame(x = c(rnorm(100, 0, 3), rnorm(100, 0, 10)),
             g = gl(2, 100))
ggplot(df, aes(x, colour = g)) + stat_ecdf()

ecdf


发现得好。添加了一个图表。 - Ari B. Friedman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接