Возможное решение с помощью ggpubr
состоит в том, чтобы поместить формулу уравнения и значения R2 в верхнюю часть графика, передав Inf
в label.y
и Inf
или -Inf
в label.x
(в зависимости от того, хотите ли вы это справа или слева от графика)
Оба текста не будут выровнены из-за верхнего индекса 2 на R. Таким образом, вам придется немного подправить его, используя vjust
и hjust
чтобы выровнять оба текста.
Тогда он будет работать даже с гранеными графами с разными масштабами.
library(ggplot)
library(ggpubr)
ggplot(mtcars, aes(x = wt, y = mpg, group = cyl))+
geom_smooth(method="lm")+
geom_point()+
stat_regline_equation(label.x = -Inf, label.y = Inf, vjust = 1.5, hjust = -0.1, size = 3)+
stat_cor(aes(label = paste(..rr.label.., ..p.label.., sep = "*`,`~")),
label.y= Inf, label.x = Inf, vjust = 1, hjust = 1.1, size = 3)+
facet_wrap(~cyl, scales = "free")
Отвечает ли он на ваш вопрос?
РЕДАКТИРОВАТЬ: Альтернатива путем добавления уравнения вручную
Как описано в вашем аналогичном вопросе ( Пометить группы ggplot с помощью уравнения с ggpmis c), вы можете добавить свое уравнение, передав текст как geom_text
:
df_mtcars <- mtcars %>% mutate(factor_cyl = as.factor(cyl))
df_label <- df_mtcars %>% group_by(factor_cyl) %>%
summarise(Inter = lm(mpg~wt)$coefficients[1],
Coeff = lm(mpg~wt)$coefficients[2],
pval = summary(lm(mpg~wt))$coefficients[2,4],
r2 = summary(lm(mpg~wt))$r.squared) %>% ungroup() %>%
#mutate(ypos = max(df_mtcars$mpg)*(1-0.05*row_number())) %>%
#mutate(Label2 = paste(factor_cyl,"~Cylinders:~", "italic(y)==",round(Inter,3),ifelse(Coeff <0,"-","+"),round(abs(Coeff),3),"~italic(x)",sep ="")) %>%
mutate(Label = paste("italic(y)==",round(Inter,3),ifelse(Coeff <0,"-","+"),round(abs(Coeff),3),"~italic(x)",
"~~~~italic(R^2)==",round(r2,3),"~~italic(p)==",round(pval,3),sep =""))
# A tibble: 3 x 6
factor_cyl Inter Coeff pval r2 Label
<fct> <dbl> <dbl> <dbl> <dbl> <chr>
1 4 39.6 -5.65 0.0137 0.509 italic(y)==39.571-5.647~italic(x)~~~~italic(R^2)==0.509~~italic(p)==0.014
2 6 28.4 -2.78 0.0918 0.465 italic(y)==28.409-2.78~italic(x)~~~~italic(R^2)==0.465~~italic(p)==0.092
3 8 23.9 -2.19 0.0118 0.423 italic(y)==23.868-2.192~italic(x)~~~~italic(R^2)==0.423~~italic(p)==0.012
И вы можете использовать его для geom_text
следующим образом:
ggplot(df_mtcars,aes(x = wt, y = mpg, group = factor_cyl, colour= factor_cyl))+
geom_smooth(method="lm")+
geom_point()+
geom_text(data = df_label,
aes(x = -Inf, y = Inf,
label = Label, color = factor_cyl),
show.legend = FALSE, parse = TRUE, size = 3,vjust = 1, hjust = 0)+
facet_wrap(~factor_cyl)
По крайней мере, это решает проблему неправильного выравнивания из-за верхнего индекса 2 на R.