Я думаю, что вам нужно будет написать пользовательскую функцию, показанную ниже. (Одно предостережение в отношении этого подхода заключается в том, что в отличие от корреляции r ^ 2 предполагает зависимую переменную, поэтому это может быть неразумно).
library(GGally) # version 1.5.0
lm_fun <- function(data, mapping, ndp=2, ...){
# Extract the relevant columns as data
x <- eval_data_col(data, mapping$x)
y <- eval_data_col(data, mapping$y)
# Calculate the r^2 & format output
m <- summary(lm(y ~ x))
lbl <- paste("r^2: ", formatC(m$r.squared, digits=ndp, format = "f"))
# Write out label which is centered at x&y position
ggplot(data=data, mapping=mapping) +
annotate("text", x=mean(x, na.rm=TRUE), y=mean(y, na.rm=TRUE), label=lbl, parse=TRUE, ...)+
theme(panel.grid = element_blank())
}
# Call
ggpairs(mtcars[c("mpg", "disp", "hp", "drat", "wt", "qsec")],
upper=list(continuous=lm_fun))
Обновлено: Не могли бы вы объяснить, как добавить новую строку в lbl между r^2 и значением?
Вы можете использовать atop
, изменив соответствующий код на:
lbl <- substitute(atop(~r^2*':', v),
list(v=formatC(m$r.squared, digits=ndp, format = "f")))
или
v <- formatC(m$r.squared, digits=ndp, format = "f")
lbl <- bquote(atop(~r^2*':', .(v)))
Затем вам нужно настроить вызов annotate
, чтобы правильно проанализировать метку.
annotate("text", x=mean(x, na.rm=TRUE), y=mean(y, na.rm=TRUE),
label=deparse(lbl), parse=TRUE, hjust=0, ...)
Я добавил hjust=0
в попытке выровнять текст по левому краю, но это не совсем сработало.
Не могли бы вы помочь объяснить, как добавить новую строку в lbl между r ^ 2 и значением? Добавление sep='\n' в paste(), lbl <- paste("r^2: ", formatC(m$r.squared, digits=ndp, format = "f"), sep='\n' ) не работает.
@ю. ; пожалуйста, смотрите обновление fr частичный ответ на комментарий
Я думаю, что вам нужно будет написать пользовательскую функцию — см. cor_fn здесь для примера. Вам нужно будет изменить корреляции на lm/r^2. Помните, что в отличие от корреляции r ^ 2 предполагает зависимость, поэтому это может быть неразумно.