Reputation: 1792
I'd like to include a text label that indicates the correlation coefficient on a series of facet_wrap
ped scatterplots (eg: "r = -0.52").
So my scatterplots look something like this:
library(tidyverse)
df <- mtcars
df %>%
ggplot(aes(y = mpg, x = hp)) +
geom_point(colour = "blue") +
facet_grid(~ factor(cyl))
Created on 2019-06-26 by the reprex package (v0.2.1)
I've then tried to create three separate correlation coefficients, after grouping, and I'd like the label to show up on the diagram, but it's not quite right. I'd like it to say something like: "r = -0.52"
library(tidyverse)
df <- mtcars
df2 <- df %>%
group_by(cyl) %>%
summarise(correlation = cor(y = mpg, x = hp, use = "pairwise.complete.obs"))
df2
#> # A tibble: 3 x 2
#> cyl correlation
#> <dbl> <dbl>
#> 1 4 -0.524
#> 2 6 -0.127
#> 3 8 -0.284
df <- left_join(df, df2, by = "cyl")
df %>%
ggplot(aes(y = mpg, x = hp)) +
geom_point(colour = "blue") +
geom_text(x = 200, y = 30, label = expression(paste(italic(r), " = ", df$correlation))) +
facet_grid(~ factor(cyl))
#> Warning in is.na(x): is.na() applied to non-(list or vector) of type
#> 'expression'
Created on 2019-06-26 by the reprex package (v0.2.1)
Upvotes: 1
Views: 1348
Reputation: 84709
You can do
geom_text(x = 200, y = 30,
label = paste0("italic(r) == ", df$correlation), parse = TRUE)
To display a rounded correlation:
geom_text(x = 200, y = 30,
label = paste0("italic(r) == ", round(df$correlation,2)), parse = TRUE)
Upvotes: 4
Reputation: 2829
Try putting the geom_text
after the facet_grid
for R to know where to put it:
df %>%
ggplot(aes(y = mpg, x = hp)) +
geom_point(colour = "blue") +
facet_grid(~ factor(cyl)) +
geom_text(x = 200, y = 30,
label = paste0("italic(r) == ", round(df$correlation,2)), parse = TRUE)
Upvotes: 2