Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to plot multiple ECDF's on one plot in different colors in R

Tags:

plot

r

ecdf

I am trying to plot 4 ecdf functions on one plot but can't seem to figure out the proper syntax.

If I have 4 functions "A, B, C, D" what would be the proper syntax in R to get them to be plotted on the same chart with different colors. Thanks!

like image 538
Jason Avatar asked Dec 16 '13 00:12

Jason


3 Answers

Here is one way (for three of them, works for four the same way):

set.seed(42)
ecdf1 <- ecdf(rnorm(100)*0.5)
ecdf2 <- ecdf(rnorm(100)*1.0)
ecdf3 <- ecdf(rnorm(100)*2.0)
plot(ecdf3, verticals=TRUE, do.points=FALSE)
plot(ecdf2, verticals=TRUE, do.points=FALSE, add=TRUE, col='brown')
plot(ecdf1, verticals=TRUE, do.points=FALSE, add=TRUE, col='orange')

Note that I am using the fact that the third has the widest range, and use that to initialize the canvas. Else you need ylim=c(...).

enter image description here

like image 146
Dirk Eddelbuettel Avatar answered Oct 31 '22 01:10

Dirk Eddelbuettel


The package latticeExtra provides the function ecdfplot.

library(lattice)
library(latticeExtra)

set.seed(42)
vals <- data.frame(r1=rnorm(100)*0.5,
                   r2=rnorm(100),
                   r3=rnorm(100)*2)

ecdfplot(~ r1 + r2 + r3, data=vals, auto.key=list(space='right')

ecdfplot with legend

like image 29
Oscar Perpiñán Avatar answered Oct 31 '22 01:10

Oscar Perpiñán


Here is an approach using ggplot2 (using the ecdf objects from [Dirk's answer])(https://stackoverflow.com/a/20601807/1385941)

library(ggplot2)
# create a data set containing the range you wish to use
d <- data.frame(x = c(-6,6))
# create a list of calls to `stat_function` with the colours you wish to use

ll <- Map(f  = stat_function, colour = c('red', 'green', 'blue'),
          fun = list(ecdf1, ecdf2, ecdf3), geom = 'step')


ggplot(data = d, aes(x = x)) + ll

enter image description here

like image 44
mnel Avatar answered Oct 31 '22 02:10

mnel