1
votes

ajout de texte différent à plusieurs grilles dans R

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?


2 commentaires

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.


3 Réponses :


0
votes

Vous pouvez utiliser stat_cor () depuis ggpubr package. La valeur par défaut est Pearson.

Exemple utilisant des valeurs pour Petal, comme dans votre exemple de code:

iris %>% 
  group_by(Species) %>% 
  mutate(Pearson.Corr= paste(Species, "R = ", 
                             round(cor(Petal.Length, Petal.Width, 
                                   method = "pearson"), digits = 2))) %>% 
ggplot(aes(Petal.Length, Petal.Width)) + 
geom_point() + 
facet_wrap(~Pearson.Corr)

Résultat:

 entrez la description de l'image ici

Voici une autre approche - ajoutez le libellé au titre de la facette:

library(ggplot2)
library(ggpubr)

iris %>% 
  ggplot(aes(Petal.Length, Petal.Width)) + 
  geom_point() + 
  geom_smooth(method = "lm") + 
  facet_wrap(~Species) + 
  stat_cor()

Résultat:

entrez la description de l'image ici


2 commentaires

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.



0
votes

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))

 entrez la description de l'image ici


1 commentaires

Merci pour votre réponse.



0
votes
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)) 

0 commentaires