добавление разного текста в несколько сеток в R - PullRequest
0 голосов
/ 25 сентября 2019

Используя встроенную базу данных радужной оболочки, я пытаюсь добавить корреляцию Пирсона для взаимосвязи между длиной Sepal и шириной Sepal по видам на графике граненого рассеяния.Как я могу сказать R ввести каждое значение в каждый график?

Я смог решить проблему, введя значения R вручную, используя следующий код.

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

Есть ли способ улучшить код?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2019

Код, который вы получили, уже почти у цели.В эстетике geom_text() вы можете использовать paste() для добавления значений корреляции как части аргумента 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))

enter image description here

0 голосов
/ 25 сентября 2019
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)) 

enter image description here

0 голосов
/ 25 сентября 2019

Вы можете использовать stat_cor() из пакета ggpubr .По умолчанию используется Pearson.

Пример использования значений для Petal, как в примере кода:

library(ggplot2)
library(ggpubr)

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

Результат:

enter image description here

Вот другой подход - добавить метку к заголовку фасета:

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)

Результат:

enter image description here

...