2010-04-07 9 views
5

Me acaba de llegar una cruz this nice code que hace que esta parcela matriz de dispersión:correlación Diagrama de dispersión de matriz con diferente tamaño de punto (en I)

alt text http://addictedtor.free.fr/graphiques/graphiques/graph_137.png

y quería ponerlo en práctica a una variables de escala likret (números enteros de 1 a 5) al hacer que los tamaños/colores del punto (en el triángulo inferior) difieran de acuerdo con la cantidad de opciones de ese tipo (como el efecto que el jitter podría haberme dado).

¿Alguna idea de cómo hacer esto en el mecanismo de trazado base?

Actualización:

me hizo la siguiente función, pero no saben cómo hacer que la escala de los puntos siempre será "bueno", ¿qué te parece?

panel.smooth2 <- function (x, y, col = par("col"), bg = NA, pch = par("pch"), 
        cex = 1, col.smooth = "red", span = 2/3, iter = 3, ...) 
{ 
    require(reshape) 
    z <- merge(data.frame(x,y), melt(table(x ,y)),sort =F)$value 
    z <- z/ (4*max(z)) 

    symbols(x, y, circles = z,#rep(0.1, length(x)), #sample(1:2, length(x), replace = T) , 
      inches=F, bg="blue", fg = bg, add = T) 

    # points(x, y, pch = pch, col = col, bg = bg, cex = cex) 
    ok <- is.finite(x) & is.finite(y) 
    if (any(ok)) 
     lines(stats::lowess(x[ok], y[ok], f = span, iter = iter), 
      col = col.smooth, ...) 
} 



a1 <- sample(1:5, 100, replace = T) 
a2 <- sample(1:5, 100, replace = T) 
a3 <- sample(1:5, 100, replace = T) 
aa <- data.frame(a1,a2,a3) 


pairs(aa , lower.panel=panel.smooth2) 

Respuesta

3

puede utilizar 'símbolos' (análogo al 'líneas' Los métodos, 'abline' et al.)

Este método le dará un control preciso sobre tanto en tamaño símbolos y el color en una sola línea de código.

Usando 'símbolos' puede establecer el tamaño, el color y la forma del símbolo. La forma y el tamaño se establecen pasando un vector para el tamaño de cada símbolo y vinculándolo a 'círculos', 'cuadrados', 'rectángulos' o 'estrellas', por ejemplo, 'estrellas' = c (4, 3, 5, 1). El color se establece con 'bg' y/o 'fg'.

symbols(x, y, circles = circle_radii, inches=1/3, bg="blue", fg=NULL) 

si entiendo la segunda parte de su pregunta, usted quiere estar razonablemente seguros de que la función que debe utilizarse para ajustar los símbolos en su parcela lo hace de una manera significativa. La función 'símbolos' escala (por ejemplo) radios de círculos basados ​​en valores en una variable 'z' (o columna data.frame, etc.) En la línea siguiente, configuro el tamaño máximo del símbolo (radio) como 1/3 pulgadas - cada símbolo, excepto el más grande, tiene un radio algo menor, escalado por la relación del valor de ese punto dat sobre el valor más grande. que esa en proporción a ¿Es esta una buena opción? No sé, me parece que el diámetro o la circunferencia particular podrían ser mejores. En cualquier caso, es un cambio trivial. En resumen, los "símbolos" con "círculos" pasados ​​escalarán los radios de los símbolos en proporción a la coordenada "z", probablemente el más adecuado para las variables continuas. Usaría color ('bg') para variables/factores discretos.

Una forma de usar 'símbolos' es llamar a su función de trazado y pasar type = 'n' que crea el objeto de trazado, pero suprime dibujando los símbolos para que pueda dibujarlos con la función 'symbols' a continuación.

No recomendaría 'cex' para este propósito. 'cex' es un factor de escala para tamaño de texto y tamaño de símbolos, pero a cuál de los dos elementos de la gráfica afecta depende de cuándo lo transfiere; si lo configura a través de 'par', actúa en la mayoría del texto que aparece en la trama; si lo configura dentro de la función 'trazar', entonces afecta el tamaño de los símbolos.

+0

Gracias Doug, fui con su solución pero surgió otra pregunta (actualicé la pregunta original) - ¿Alguna idea? –

+0

ok Tal - editando mi respuesta ahora a la luz de su actualización Q. – doug

+0

Gracias shane, implementé su sugerencia y publiqué el resultado (con crédito obviamente) aquí: http://www.r-statistics.com/2010/04/correlation-scatter-plot-matrix-for-ordered-categórico-data / –

2

Claro, sólo tiene que utilizar cex:

set.seed(42) 
DF <- data.frame(x=1:10, y=rnorm(10)*10, z=runif(10)*3) 
with(DF, plot(x, y, cex=z)) 

que le da diferentes tamaños círculo. El color puede ser simplemente una cuarta dimensión.

+0

Hola Dirk, gracias. Terminé usando la sugerencia de Doug, pero surgió otra pregunta (actualicé la pregunta original) - ¿Alguna idea? –

Cuestiones relacionadas