Вы можете сделать что-то похожее на то, что хотите, с помощью следующего кода. Для моделей можно использовать broom
, а для окончательного графика patchwork
:
library(ggrepel)
library(broom)
library(gridExtra)
library(patchwork)
library(ggplot2)
#Data
df <- structure(list(C3H8 = c(85L, 50L, 25L, 85L, 50L, 25L, 85L, 50L,
25L), O2 = c(20.9, 20.9, 20.94, 10, 10, 10, 0.1, 0.1, 0.1), bias = c(0.01,
0.1, 0.32, -1.22, -1.05, -1.29, -3.13, -2.39, -2.55)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9"))
Код:
#First plot
G1 <- ggplot(Data.Frame.1, aes(O2, bias)) +
theme_bw() +
theme(legend.position = 'bottom', plot.title = element_text(hjust=0.5)) +
geom_point(aes(colour = factor(C3H8))) +
geom_line(aes(colour = factor(C3H8))) +
geom_text_repel(aes(label=paste(bias),
hjust= 0.4,
vjust=-.8, colour = factor(C3H8)),
size = 3) +
ggtitle(expression(O[2]~Bias)) +
labs(
x = expression('O'[2]),
y = "% bias",
colour = expression('C'[3]*'H'[8]~(ppm))
)
#Models
regs <- df %>% group_by(C3H8) %>%
do(fit = lm(bias ~ O2 , data = .))
coeffs <- tidy(regs,fit)
#Format
coeffs[,-c(1,2)] <- round(coeffs[,-c(1,2)],3)
#Arrange new plot
G2 <- G1 / tableGrob(coeffs)
Вывод:
введите описание изображения здесь
Я не уверен, что отношения, которые вы хотите в lm()
, равны bias ~ O2
, но вы можете это изменить.