L'ajout d'italique r avec un coefficient de corrélation à un nuage de points diagramme en ggplot
Je suis en train d'utiliser le code ci-dessous pour générer un simple nuage de points avec un coefficient de corrélation qui aurait mis en italiques r placé sur la parcelle.
data(mtcars)
# Load required libraries
require(ggplot2) # To derive the graphs
require(ggthemes) # To apply ggplot themes to the chart
require(scales) # For pretty breaks
# Function to generate correlation coefficient for the charts
corr_eqn <- function(x,y, digits = 2) {
corr_coef <- round(cor(x, y), digits = digits)
corr_coef <- expression(paste(italic(r)," = ", corr_coef))
return(corr_coef)
}
# Provide a scatter plot for income and health deprivation
ggplot(mtcars, aes(x = drat, y = wt)) +
geom_point(shape = 19, size = 2, aes(colour = as.factor(cyl))) +
geom_smooth(colour = "red", fill = "lightgreen", method = 'lm') +
ggtitle("Example") +
xlab("drat") +
ylab("wt") +
scale_colour_tableau("tableau10") +
geom_text(x = 3, y = 3,
label = corr_eqn(mtcars$drat,
mtcars$wt), parse = TRUE) +
theme(legend.key = element_blank(),
legend.background = element_rect(colour = 'black'),
legend.position = "bottom",
legend.title = element_blank(),
plot.title = element_text(lineheight = .8, face = "bold", vjust = 1),
axis.text.x = element_text(size = 11, vjust = 0.5,
hjust = 1, colour = 'black'),
axis.text.y = element_text(size = 11, colour = 'black'),
axis.title = element_text(size = 10, face = 'bold'),
axis.line = element_line(colour = "black"),
plot.background = element_rect(colour = 'black', size = 1),
panel.background = element_blank())
Le code s'arrête avec la ?
marque de la console. L'exécution du code avec les lignes:
# geom_text(x = 3, y = 3,
# label = corr_eqn(mtcars$drat, mtcars$wt), parse = TRUE) +
commenté, génère le tableau suivant:
Je devine que ma fonction pour générer de l'équation de la format r = 0.7 ne fonctionne pas, comment puis-je résoudre ce problème?
Jetez un oeil sur cette question similaire.
comme une question de fait, j'étais en train d'écrire ma fonction à l'aide de la discussion dans la question, mais elle ne fonctionne pas. Clairement, j'ai fait quelque chose de mal.
comme une question de fait, j'étais en train d'écrire ma fonction à l'aide de la discussion dans la question, mais elle ne fonctionne pas. Clairement, j'ai fait quelque chose de mal.
OriginalL'auteur Konrad | 2015-07-10
Vous devez vous connecter pour publier un commentaire.
Comme vous soupçonne, vous avez juste besoin d'ajuster votre fonction. Vous pourriez avoir utilisé
substitute
comme on le voit dans cette réponse, mais vous pouvez aussi simplement utiliserpaste
ici.Notez que si vous aviez ajouté
as.character
à ce que votre fonction d'origine est retourné, les choses auraient analysé. Cependant, le résultat aurait été aveccorr_coef
comme une chaîne de caractères au lieu du coefficient de corrélation que vous vouliez.Je dois également ajouter que
geom_text
peut entraîner une mauvaise résolution si vous ne mettez pas les étiquettes et les coordonnées dans un de nouvelles données.cadre.Puis utilisez le
data
argument etaes
pourgeom_text
:Voir
annotate
avecgeom = "text"
comme une autre option qui évite les nouvelles données.cadre.Vous pouvez certainement changer la taille de la police et de la famille de l'étiquette de
geom_text
à l'aide de lasize
etfamily
arguments lors de l'utilisation deparse = TRUE
, mais pas la police.corr_eqn <- function(x,y, digits = 2) { + corr_coef <- round(cor(x, y), digits = digits) + paste("italic(r) == ", corr_coef) + } labels = data.frame(x = 3, y = 3, label = corr_eqn(mtcars$drat, mtcars$wt))
produit une df avec une seule ligne ` x y de l'étiquette 3 3 italique(r) == -0.71`Oui, c'est vrai.
Juste pour insister sur l'observation faite par aosmith, Il n'est pas juste que les étiquettes doivent être stockés dans un dataframe, mais ils doivent également être transmis comme tels à l'intérieur de
geom_text
, ou pour le dire différemment, en passantlabels$label
àgeom_text
n'est pas assez bon.OriginalL'auteur aosmith