2010-08-27 11 views
13

Estoy en mi camino de terminar los gráficos para un papel y decidí (after a discussion on stats.stackoverflow), a fin de transmitir la mayor cantidad de información posible, crear el siguiente gráfico que presente tanto en primer plano los medios como en el fondo los datos sin procesar : alt textCómo evitar la sobreimpresión (para puntos) usando base-graph?

Sin embargo, un problema persiste y es sobrerrrollar. Por ejemplo, el punto marcado parece que refleja un punto de datos, pero de hecho existen 5 puntos de datos con el mismo valor en ese lugar.
Por lo tanto, me gustaría saber si hay una manera de ocuparse de sobrerrollar en base graph usando points como la función.
Sería ideal si, por ejemplo, los puntos respectivos se oscurecen, o más grueso o más, ...

hacerlo manualmente no es una opción (demasiados gráficos y puntos de este tipo). Además, ggplot2 tampoco es lo que quiero aprender para lidiar con este único problema (una de las razones es que me suelen gustar los ejes dobles lo que no está incluido en ggplot2).


Actualización: escribí una función que crea automáticamente los gráficos anteriores y evita overplotting añadiendo temblor vertical u horizontal (o ambos): check it out!

Esta función está disponible ahora como raw.means.plot y raw.means.plot2 en el paquete plotrix (en CRAN).

Respuesta

14

El enfoque estándar es agregar algo de ruido a los datos antes de trazar. R tiene una función jitter() que hace exactamente eso. Puede usarlo para agregar el ruido necesario a las coordenadas de su trazado. por ejemplo:

X <- rep(1:10,10) 
Z <- as.factor(sample(letters[1:10],100,replace=T)) 

plot(jitter(as.numeric(Z),factor=0.2),X,xaxt="n") 
axis(1,at=1:10,labels=levels(Z)) 
+0

Amplié este enfoque un poco al escribir una pequeña función que acaba de agregar jitter (es decir, ruido uniforme) a los duplicados. Ahora soy feliz. – Henrik

+1

Haga los puntos más pequeños también. – John

8

Además de variación, otro buen enfoque es la mezcla alfa que se puede obtener (en los dispositivos gráficos supporing la misma) como el cuarto parámetro de color. Proporcioné un ejemplo para 'sobrerrollar' de dos histogramas en this SO question.

+0

Nunca pensé en usar mezclas alfa en este caso, gran idea. Puede combinar ambos, por lo que aún puede ver los puntos individuales: gráfico (jitter (como.numérico (Z), factor = 0.2), X, xaxt = "n", col = rgb (0, 0, 0, 0.5)) –

3

También puede usar sunflowerplot, aunque sería difícil implementarlo aquí. Yo usaría alfa-blending, como sugirió Dirk.

4

Una idea adicional para el problema general de mostrar el número de puntos es usar una trama de alfombra (función de alfombra), esto coloca pequeñas marcas a lo largo del margen que pueden mostrar cuántos puntos contribuyen (todavía usan mezcla de jittering o alfa para corbatas). Esto permite que los puntos reales muestren sus valores verdaderos en lugar de valores inestables, pero la alfombra puede indicar qué partes de la gráfica tienen más valores.

Por ejemplo, el parche directo o el mezclado alfa es probablemente el mejor, pero en algunos otros casos el diagrama de alfombra puede ser útil.

Cuestiones relacionadas