En utilisant la base de données d'iris intégrée, j'essaie d'ajouter la corrélation de Pearson pour la relation entre la longueur de Sepal et la largeur de Sepal par espèce sur un nuage de points à facettes. Comment puis-je dire à R de saisir chaque valeur dans chaque graphique?
J'ai pu résoudre le problème en saisissant les valeurs R manuellement à l'aide du code suivant.
z<- iris %>% group_by(Species) %>% summarize(Pearson.Corr= round(cor(Petal.Length, Petal.Width, method = "pearson"),digits = 2)) ggplot(iris, aes(x = Petal.Length, y = Petal.Width, col = Species)) + geom_point() + facet_grid(~ Species, scales="free_x") + geom_smooth(method = "lm", col = "black") + guides(color = FALSE) + theme(strip.text = element_text(face="bold", size=rel(0.5), color="white"), strip.background = element_rect(fill="royalblue")) + labs(title = "Scatterplots of Petal Length Versus Width across Iris Species with linear regression", X= "Petal Length", Y = "Petal Width") + geom_text(data=z, mapping= aes(label= c("R=", "R=", "R="), cyl= Species, x= c(1.5, 4, 5.5), y = c(1, 2, 1.25)))
Existe-t-il un moyen d'améliorer le code?
3 Réponses :
Merci, je l'apprécie. Qui aide. Cependant, juste à des fins d'apprentissage, comment puis-je insérer une étiquette qui est un texte à moitié répété comme ici "R =" et une demi-équation cor avec une solution différente pour chaque grille?
Si c'était moi, je serais tenté de créer une nouvelle variable avec l'étiquette et de l'ajouter au titre de la facette. J'ajouterai cela à la réponse.
Le code que vous avez est presque là. Dans l'esthétique geom_text ()
, vous pouvez utiliser paste ()
pour ajouter les valeurs de corrélation dans le cadre de l'argument label
.
z<- iris %>% group_by(Species) %>% summarize(Pearson.Corr= round(cor(Petal.Length, Petal.Width, method = "pearson") ,digits = 2)) ggplot(iris, aes(x = Petal.Length, y = Petal.Width, col = Species)) + geom_point() + facet_grid(~ Species, scales="free_x") + geom_smooth(method = "lm", col = "black") + guides(color = FALSE) + theme(strip.text = element_text(face="bold", size=rel(0.5), color="white"), strip.background = element_rect(fill="royalblue")) + labs(title = "Scatterplots of Petal Length Versus Width across Iris Species with linear regression", X= "Petal Length", Y = "Petal Width") + geom_text(data=z, mapping = aes(label= paste("R =", z$Pearson.Corr), x= -Inf, y = Inf, hjust = 0, vjust = 1))
Merci pour votre réponse.
library(tidyverse) library(ggpubr) z<- iris %>% group_by(Species) %>% summarize(Pearson.Corr= round(cor(Petal.Length, Petal.Width, method = "pearson"),digits = 2)) ggplot(iris, aes(x = Petal.Length, y = Petal.Width, col = Species)) + geom_point() + facet_grid(~ Species, scales="free_x") + geom_smooth(method = "lm", col = "black") + guides(color = FALSE) + theme(strip.text = element_text(face="bold", size=rel(0.5), color="white"), strip.background = element_rect(fill="royalblue")) + labs(title = "Scatterplots of Petal Length Versus Width across Iris Species with linear regression", X= "Petal Length", Y = "Petal Width") + stat_cor(method = "pearson", label.x = c(1, 3, 4.5), label.y = c(1, 2, 1.25))
Votre code utilise des pétales, pas des sépales comme indiqué dans la question?
Vous avez raison. Cependant, le code est correct. J'ai écrit par erreur Sepal dans le corps des questions.