Как построить несколько ecdf-файлов, используя ggplot? - PullRequest
4 голосов
/ 27 июля 2011

У меня есть данные, отформатированные следующим образом:

    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')

Но я не могу понять, как построить несколько кривых. Есть предложения?

Ответы [ 2 ]

13 голосов
/ 27 июля 2011

Проще, если вы отойдете от 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 )

using 2 grouping variables

6 голосов
/ 08 апреля 2013

С конца 2012 года ggplot2 включает в себя специальную функцию для печати ecdf: ggplot2 docs .

Пример оттуда даже короче хорошего решения Ари:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...