5 votos

¿Cómo hacer un bonito gráfico de dispersión en R?

Estoy tratando de hacer lo siguiente y ya he pasado unas cuantas horas en vano:

Quería hacer el gráfico de dispersión. Pero dada la alta dispersión de esos puntos, me gustaría dividir el eje x en binarios y, a continuación, para cada binario del eje x, trazar los cuantiles de los valores y de los puntos de datos en cada binario:

  1. Tamaño de recipiente uniforme en el eje x;
  2. Igual número de observaciones en cada casilla;

(Estos dos son casos distintos).

¿Cómo hacer eso en R? Supongo que para que quede bonito, mejor lo hago en ggplot2?

El origen de este problema era que un gráfico de dispersión simple con demasiados puntos con alta dispersión generaba demasiados puntos volando por todos lados.
Estamos intentando suavizar un poco los gráficos...
¿Alguna buena recomendación?

¿Qué tal "trazar los cuantiles de cada bin"?

Pero, ¿cómo se trazan los cuantiles? ¿Debo especificar el cuantil del 50%, etc.?


[p.s. Actualización 3/11/2011]: Estoy probando lo siguiente siguiendo los posts de ayuda de R:

DAT <- data.frame(x = runif(1000, 0, 20), y = rnorm(1000))
DAT$xbin <- with(DAT, cut(x, seq(0, 20, 2)))

p <- ggplot(DAT, aes(x = x, y = y)) + geom_point(alpha = 0.2) +
stat_quantile(aes(colour = ..quantile..), quantiles = seq(0.05, 0.95,
by=0.05)) + facet_wrap(~ xbin, scales = "free")
print(p)

Mis preguntas son:

1) ¿Cómo hago para que haya "igual número de puntos" en cada casilla a lo largo del eje x? es decir, el requisito original número 2 de mi pregunta?

2) Y además, no importa cómo haya cambiado el quantiles = seq(0.05, 0.95, by=0.05)) línea, el número de líneas en cada casilla y el número de leyendas en el lado derecho de cada gráfico son diferentes...

¿Cuál es la trampa? ¿Me estoy perdiendo algo?

Pensé que el número de líneas de cuantiles y el número de leyendas deberían ser exactamente iguales, ¿no?

23voto

Jared Farrish Puntos 120

No es realmente una respuesta a su pregunta acerca de binning una solución fácil en ggplot2 para hacer frente a gran cantidad de datos en los gráficos de dispersión es utilizar el parámetro alfa para establecer una cierta transparencia

> df <- data.frame(v1 = rnorm(100000), v2 = rnorm(100000))
> ggplot(df, aes(x=v1, y=v2)) + geom_point(alpha = .01) + theme_bw()

Result

11voto

Bittercoder Puntos 4692

Puede hacerlo en la nueva versión de ggplot2 (0.9).

Puedes probarlo:

library(ggplot2) #make sure the newest is installed

df <- data.frame(v1 = runif(1000), v2 = runif(1000))

bin.plot<-qplot(data=df,
                x=v1,
                y=v2,
                z=v2)

Basic plot

bin.plot+stat_summary_hex(fun=function(z)length(z))

Plot with hexagonal binning

bin.plot+stat_summary2d()(fun=function(z)length(z))

Plot with rectangular binning

También pueden ser de interés si se quiere ubicar sólo en una variable

geom_violin
geom_dotplot

También puedes empezar por binar tus datos y luego hacer un jitter.

Las notas de la versión de ggplot2 0.9: http://cloud.github.com/downloads/hadley/ggplot2/guide-col.pdf

Para las versiones de desarrollo de ggplot2

#library(devtools)
#dev_mode()
#install_github("ggplot2")
#library(ggplot2)

5voto

Brettski Puntos 5485

Puede que quieras mirar estas dos entradas de 'SAS y R':

http://sas-and-r.blogspot.com/2011/07/example-91-scatterplots-with-binning.html
http://sas-and-r.blogspot.com/2011/07/example-92-transparency-and-bivariate.html

Cubren el uso del binning, la transparencia y los estimadores de densidad de kernel bivariante para los gráficos de dispersión de grandes cantidades de datos. Pueden servir como buenos puntos de partida.

Soy bastante parcial con respecto a ggplot2, así que no voy a comentar si es necesario o no utilizarlo para que sea bonito; las cifras de estas entradas me parecen perfectamente atractivas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X