How can a data ellipse be superimposed on a ggplot2 scatterplot?
Maybe this could help you:
#bootstrapset.seed(101)n <- 1000x <- rnorm(n, mean=2)y <- 1.5 + 0.4*x + rnorm(n)df <- data.frame(x=x, y=y, group="A")x <- rnorm(n, mean=2)y <- 1.5*x + 0.4 + rnorm(n)df <- rbind(df, data.frame(x=x, y=y, group="B"))#calculating ellipseslibrary(ellipse)df_ell <- data.frame()for(g in levels(df$group)){df_ell <- rbind(df_ell, cbind(as.data.frame(with(df[df$group==g,], ellipse(cor(x, y), scale=c(sd(x),sd(y)), centre=c(mean(x),mean(y))))),group=g))}#drawinglibrary(ggplot2)p <- ggplot(data=df, aes(x=x, y=y,colour=group)) + geom_point(size=1.5, alpha=.6) + geom_path(data=df_ell, aes(x=x, y=y,colour=group), size=1, linetype=2)
Output looks like this:
Here is more complex example.
Keelan Evanini, Ingrid Rosenfelder and Josef Fruehwald (JoFrhwld@gmail.com) have created a ggplot2 stat implementation of a 95% confidence interval ellipses (and an easier way to plot ellipses in ggplot2):
You can use it as:
library(ggplot2)library(devtools)library(digest)source_url("https://raw.github.com/low-decarie/FAAV/master/r/stat-ellipse.R") qplot(data=df, x=x, y=y, colour=colour)+stat_ellipse()
To create the data
set.seed(101)n <- 1000x <- rnorm(n, mean=2)y <- 1.5 + 0.4*x + rnorm(n)colour <- sample(c("first", "second"), size=n, replace=T)df <- data.frame(x=x, y=y, colour=colour)