varias tutorial superponer studio lineas grafico graficas ggplot español dispersion diagrama barras r ggplot2 ellipse scatter-plot

tutorial - ¿Cómo se puede superponer una elipse de datos en un diagrama de dispersión ggplot2?



superponer graficas en r ggplot (2)

Tengo una función R que produce elipses de confianza del 95% para diagramas de dispersión. La salida se ve así, con un valor predeterminado de 50 puntos para cada elipse (50 filas):

[,1] [,2] [1,] 0.097733810 0.044957994 [2,] 0.084433494 0.050337990 [3,] 0.069746783 0.054891438

Me gustaría superponer un número de tales elipses para cada nivel de un factor llamado ''sitio'' en un ggplot2 dispersión ggplot2 , producido a partir de este comando:

> plat1 <- ggplot(mapping=aes(shape=site, size=geom), shape=factor(site)); plat1 + geom_point(aes(x=PC1.1,y=PC2.1))

Esto se ejecuta en un conjunto de datos, llamado dflat que se ve así:

site geom PC1.1 PC2.1 PC3.1 PC1.2 PC2.2 1 Buhlen 1259.5649 -0.0387975838 -0.022889782 0.01355317 0.008705276 0.02441577 2 Buhlen 653.6607 -0.0009398704 -0.013076251 0.02898955 -0.001345149 0.03133990

El resultado está bien, pero cuando trato de agregar la elipse (digamos para este sitio, llamado "Buhlen"):

> plat1 + geom_point(aes(x=PC1.1,y=PC2.1)) + geom_path(data=subset(dflat, site="Buhlen"),mapping=aes(x=ELLI(PC1.1,PC2.1)[,1],y=ELLI(PC1.1,PC2.1)[,2]))

"Error in data.frame(x = c(0.0977338099339815, 0.0844334944904515, 0.0697467834016782, : arguments imply differing number of rows: 50, 211 un mensaje de error: "Error in data.frame(x = c(0.0977338099339815, 0.0844334944904515, 0.0697467834016782, : arguments imply differing number of rows: 50, 211

He logrado arreglar esto en el pasado, pero no recuerdo cómo. Parece que geom_path confía en los mismos puntos en lugar de trazar nuevos. Cualquier ayuda sería apreciada.


Keelan Evanini, Ingrid Rosenfelder y Josef Fruehwald ([email protected]) han creado una implementación de estadística ggplot2 con un 95% de elipses de intervalo de confianza (y una manera más fácil de trazar elipsis en ggplot2):

GitHub stat-ellipse.R

su sitio

Puedes usarlo como:

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

Para crear los datos

set.seed(101) n <- 1000 x <- 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)


Quizás esto podría ayudarte:

#bootstrap set.seed(101) n <- 1000 x <- 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 ellipses library(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)) } #drawing library(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)

La salida se ve así:

Here hay un ejemplo más complejo.