utilisation ggpairs pour créer ce tracé
J'ai un peu de code dans une Brillante application qui produit le premier graphique ci-dessous. Comme vous pouvez le voir la taille de la police varie avec la taille du coefficient de corrélation. Je voudrais produire quelque chose de semblable avec ggpairs (GGally) ou ggplot2. La seconde image ci-dessous a été réalisé avec le code suivant:
library(GGally)
ggpairs(df,
upper = list(params = c(size = 10)),
lower = list(continuous = "smooth", params = c(method = "loess", fill = "blue"))
)
Comme vous pouvez le voir la taille de la corrélation de la police est réglable à l'aide de la taille, mais lorsque j'ai mis un vecteur de tailles seule la première valeur est utilisée. Je tiens également à supprimer "Corr:" et d'ajouter un indicateur de l'importance. En utilisant des couleurs pour le signe du coefficient de corrélation serait bien aussi. Dans la partie basse, method
et fill
ne sont pas liées à smooth
. Toutes les suggestions sur la façon d'obtenir la 2ème parcelle de capturer plus de fonctionnalités de la 1ère serait génial.
df <- structure(list(y1 = c(8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24,
4.26, 10.84, 4.82, 5.68), x1 = c(10L, 8L, 13L, 9L, 11L, 14L,
6L, 4L, 12L, 7L, 5L), y2 = c(9.14, 8.14, 8.74, 8.77, 9.26, 8.1,
6.13, 3.1, 9.13, 7.26, 4.74), x2 = c(10L, 8L, 13L, 9L, 11L, 14L,
6L, 4L, 12L, 7L, 5L), y3 = c(7.46, 6.77, 12.74, 7.11, 7.81, 8.84,
6.08, 5.39, 8.15, 6.42, 5.73), x3 = c(10L, 8L, 13L, 9L, 11L,
14L, 6L, 4L, 12L, 7L, 5L)), .Names = c("y1", "x1", "y2", "x2",
"y3", "x3"), class = "data.frame", row.names = c(NA, -11L))
# based mostly on http://gallery.r-enthusiasts.com/RGraphGallery.php?graph=137
panel.plot <- function(x, y) {
usr <- par("usr"); on.exit(par(usr))
par(usr = c(0, 1, 0, 1))
ct <- cor.test(x,y)
sig <- symnum(ct$p.value, corr = FALSE, na = FALSE,
cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),
symbols = c("***", "**", "*", ".", " "))
r <- ct$estimate
rt <- format(r, digits=2)[1]
cex <- 0.5/strwidth(rt)
text(.5, .5, rt, cex=cex * abs(r))
text(.8, .8, sig, cex=cex, col='blue')
}
panel.smooth <- function (x, y) {
points(x, y)
abline(lm(y~x), col="red")
lines(stats::lowess(y~x), col="blue")
}
pairs(df, lower.panel=panel.smooth, upper.panel=panel.plot)
OriginalL'auteur Vincent | 2014-02-12
Vous devez vous connecter pour publier un commentaire.
Modifier pour GGally 1.0.1
Depuis
params
est maintenant obsolète, utilisezwrap
comme suit:Réponse originale à cette question
De personnalisation de la complexité des parcelles n'est pas toujours disponible par le biais de la liste de paramètres. C'est naturel: il y a trop de paramètres à prendre en compte. Donc, la seule solution fiable est de modifier le code source. Ce qui est particulièrement agréable lorsque le projet est hébergé sur github.
Voici une modification simple pour commencer avec, dans un fourche repo. La façon la plus simple de mettre à jour le code et de produire le graphique ci-dessous est de copier et coller la fonction
ggally_cor
à votre environnement mondial, puis écrasez la même fonction, dans lesGGally
espace de noms:J'ai supprimé le texte de l'étiquette et de l'importance des indicateurs. La modification de la couleur et de la taille n'est pas facile, cependant, puisque celles-ci sont mappées plus tôt. Je pense toujours à elle, mais vous avez l'idée et peut passer avec votre d'autres personnalisations.
Edit: j'ai mis à jour le code, voir mon dernier commit. Maintenant les cartes de la taille de l'étiquette de la valeur absolue de la corrélation. Vous pouvez faire la même chose si vous voulez de différentes couleurs, mais je pense que ce n'est probablement pas une bonne idée.
Je suis assez sûr que la variable de taille et de couleur est possible. De plus, il ne prendra pas plus de 10 lignes de code, probablement moins. La seule chose qui doit être fait est de remplacer le mappage existant. Je ne suis pas encore sûr de la façon d'accomplir cela, mais je suis intéressé à trouver. Pendant ce temps, une approche à multiples facettes vaut certainement la peine d'essayer: il peut en effet être un plus chemin d'accès approprié.
J'ai posé une question here, c'est ce dont nous avons besoin pour faire le travail.
vous êtes à quelques pas devant moi. Suggérez-vous de faire cela en "normal" ggplot ou de l'adaptation des mappages pour ggpairs. Un simple exemple, je peux construire sur serait génial.
Merci pour la suggestion. Je vais jeter un oeil quand je le peux, peut-être que la récente mise à jour nécessitera quelques modifications à la solution que j'ai proposée.
OriginalL'auteur tonytonov