2010-04-07 9 views
5

Ho appena venuto una croce this nice code che rende questa trama matrice di dispersione:Correlazione Scatter plot a matrice con il formato differente punto (in R)

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

E ha voluto per la sua attuazione a un variabili di scala likret (interi da 1 a 5) facendo in modo che le dimensioni/i colori del punto (nel triangolo inferiore) differiscano in base a quante opzioni di quel tipo si verificano (come l'effetto che il jitter potrebbe avermi dato).

Qualche idea su come eseguire questa operazione sul meccanismo di tracciamento di base?

Aggiornamento:

ho fatto la seguente funzione, ma non so come avere la scala dei puntini di essere sempre "buona", cosa ne pensi?

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) 

risposta

3

si può usare 'simboli' (analoghe a 'linee' i metodi, 'abline' et al.)

Questo metodo vi darà il controllo a grana fine su entrambe le dimensioni dei simboli e colori con un solo linea di codice.

Utilizzando "simboli" è possibile impostare la dimensione, il colore e la forma del simbolo. La forma e le dimensioni sono impostate passando un vettore per la dimensione di ciascun simbolo e legandolo a "cerchi", "quadrati", "rettangoli" o "stelle", ad esempio "stelle" = c (4, 3, 5, 1). Il colore è impostato con 'bg' e/o 'fg'.

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

Se ho ben capito la seconda parte della tua domanda, si vuole essere ragionevolmente sicuri che la funzione che si utilizza per scalare i simboli nella vostra trama lo fa in modo significativo. La funzione 'simboli' ridimensiona (ad esempio) i raggi di cerchi basati su valori in una variabile 'z' (o colonna data.frame, ecc.) Nella riga sottostante, ho impostato la dimensione massima del simbolo (raggio) come 1/3 di pollice - ogni simbolo tranne il più grande ha un raggio un po 'più piccolo, scalato dal rapporto tra il valore di quel punto dat il valore più grande. di quello proporzionato a questa è una buona scelta? Non lo so - mi sembra che il diametro o la circonferenza in particolare potrebbero essere migliori. In ogni caso, questo è un cambiamento banale. In sintesi, i "simboli" con "cerchi" passati ridimensioneranno i raggi dei simboli in proporzione alla coordinata "z", probabilmente la scelta migliore per le variabili continue. Vorrei usare il colore ('bg') per variabili/fattori discreti.

Un modo per utilizzare "simboli" è chiamare la funzione di stampa e passare in type = 'n' che crea l'oggetto trama ma sopprime il disegno dei simboli in modo da poterli disegnare con la funzione 'simboli' successiva.

Non consiglierei 'cex' per questo scopo. 'cex' è un fattore di scala sia per le dimensioni del testo che per le dimensioni dei simboli, ma quale di questi due elementi trama dipende da quando lo passi - se lo imposti tramite 'par' allora agisce sulla maggior parte del testo che appare sulla trama; se lo si imposta all'interno della funzione 'trama', influisce sulla dimensione dei simboli.

+0

Grazie Doug, sono andato con la tua soluzione ma è venuta fuori un'altra domanda (ho aggiornato la domanda originale) - qualche pensiero? –

+0

ok Tal - modifica la mia risposta ora alla luce della Q. aggiornata – doug

+0

Grazie shane, ho implementato il tuo suggerimento e pubblicato il risultato (ovviamente con credito) qui: http://www.r-statistics.com/2010/04/correlazione-scatter-plot-matrice-per-ordinata categorica-dati / –

2

Certo, basta usare 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)) 

che ti dà varie dimensioni cerchio. Il colore può essere semplicemente una quarta dimensione.

+0

Ciao Dirk, grazie. Ho finito per usare il suggerimento di Doug ma è venuta fuori un'altra domanda (ho aggiornato la domanda originale) - qualche pensiero? –