I'm trying to use the code below to generate a simple scatter plot with a correlation coefficient that would have italicised r placed on the plot.
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())
The code stops with the ?
mark in console. Running the code with the lines:
# geom_text(x = 3, y = 3,
# label = corr_eqn(mtcars$drat, mtcars$wt), parse = TRUE) +
commented, generates the following chart:
I'm guessing that my function to generate equation of the format r = 0.7 does not work, how can I fix it?
To add correlation coefficient with P-value to a scatter plot, we use the stat_cor() function of the ggpubr package in the R Language. The ggpubr package provides some easy-to-use functions for creating and customizing ggplot2 plots.
In order to compute a correlation in R, we use the cor() function. The first argument x is the first of the two variables for which we would like to calculate a correlation. The second argument y is the second of the two variables.
The sample correlation coefficient (r) is a measure of the closeness of association of the points in a scatter plot to a linear regression line based on those points, as in the example above for accumulated saving over time.
As you suspected, you just need to tweak your function. You could have used substitute
as seen in this answer, but you can also just use paste
here.
corr_eqn <- function(x,y, digits = 2) {
corr_coef <- round(cor(x, y), digits = digits)
paste("italic(r) == ", corr_coef)
}
Note that if you'd added as.character
to what your original function returned things would have parsed. However, the result would have been with corr_coef
as a string instead of the actual correlation coefficient you wanted.
I should also add that geom_text
can result in poor resolution if you don't put the labels and coordinates into a new data.frame.
labels = data.frame(x = 3, y = 3, label = corr_eqn(mtcars$drat, mtcars$wt))
Then use the data
argument and aes
for geom_text
:
geom_text(data = labels, aes(x = x, y = y,
label = label), parse = TRUE)
See annotate
with geom = "text"
as another option that avoids the new data.frame.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With