2010-04-07 4 views
5

Je suis venu une croix this nice code qui fait cette matrice de diagramme de dispersion:corrélation parcellaire matrice Scatter avec la taille de point différent (en R)

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

et voulait l'appliquer à une variable d'échelle likret (entiers de 1 à 5) en faisant varier les tailles/couleurs du point (dans le triangle inférieur) en fonction du nombre d'options de ce type (comme l'effet que la gigue pourrait m'avoir donné).

Une idée sur la façon de faire cela sur le mécanisme de traçage de base?

Mise à jour:

J'ai fait la fonction suivante, mais ne savent pas comment avoir l'échelle des points toujours être « bon », que pensez-vous?

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) 

Répondre

3

Vous pouvez utiliser « symboles » (analogues aux de lignes «méthodes, « abline » et al.)

Cette méthode vous donne un contrôle fin sur les deux dimensions des symboles et des couleurs en une seule ligne de code. En utilisant 'symboles', vous pouvez définir la taille, la couleur et la forme du symbole. La forme et la taille sont définies en passant un vecteur pour la taille de chaque symbole et en le liant soit à 'cercles', 'carrés', 'rectangles' ou 'étoiles', par exemple, 'étoiles' = c (4, 3, 5, 1). La couleur est définie avec 'bg' et/ou 'fg'.

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

Si je comprends la deuxième partie de votre question, vous voulez être raisonnablement sûr que la fonction que vous utilisez à l'échelle les symboles dans votre complot le fait d'une manière significative. La fonction 'symboles' met à l'échelle (par exemple) les rayons des cercles basés sur les valeurs d'une variable 'z' (ou colonne data.frame, etc.) Dans la ligne ci-dessous, je définis la taille maximale du symbole (rayon) 1/3 de pouce - chaque symbole sauf le plus grand a un rayon d'une fraction plus petit, mis à l'échelle par le rapport de la valeur de ce point de donnée sur la plus grande valeur. que celui-ci en proportion de Est-ce un bon choix? Je ne sais pas - il me semble que le diamètre ou particulièrement la circonférence pourrait être meilleur. En tout cas, c'est un changement trivial. En résumé, les 'symboles' avec les 'cercles' passés mettront à l'échelle les rayons des symboles proportionnellement à la coordonnée 'z' - probablement mieux adaptés aux variables continues. J'utiliserais la couleur ('bg') pour les variables/facteurs discrets. L'une des façons d'utiliser les 'symboles' est d'appeler votre fonction plot et de passer dans type = 'n' qui crée l'objet plot mais supprime le dessin des symboles pour que vous puissiez les dessiner avec la fonction 'symbols'.

Je ne recommanderais pas 'cex' à cet effet. 'cex' est un facteur d'échelle pour la taille du texte et la taille des symboles, mais lequel de ces deux éléments dépend de quand vous le transmettez - si vous le placez par 'par', alors il agit sur la plus grande partie du texte apparaissant sur l'intrigue; Si vous le définissez dans la fonction 'plot', cela affecte la taille des symboles.

+0

Merci Doug, je suis allé avec votre solution, mais une autre question est venue (j'ai mis à jour la question originale) - des idées? –

+0

ok Tal - éditer ma réponse maintenant à la lumière de votre mise à jour Q. – doug

+0

Merci Shane, j'ai mis en œuvre votre suggestion et publié le résultat (avec crédit évidemment) ici: http://www.r-statistics.com/2010/04/correlation-scatter-plot-matrice-pour-ordre-categorique-données / –

2

Bien sûr, il suffit d'utiliser 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)) 

qui vous donne différentes tailles de cercle. La couleur peut simplement être une quatrième dimension.

+0

Salut Dirk, merci. J'ai fini par utiliser la suggestion de Doug, mais une autre question a été soulevée (j'ai mis à jour la question initiale) - des idées? –

Questions connexes