Построение уравнения линии регрессии (порядка 2) на каждом графике - PullRequest
0 голосов
/ 23 января 2019

Я работал над некоторым кодом, чтобы выполнить итерацию создания диаграмм рассеяния на основе данных из фрейма данных и экспортировать каждую диаграмму рассеяния с линией регрессии 2-го порядка в один файл PDF с каждой страницей в качестве отдельной диаграммы рассеяния.То, что я хотел бы сделать, это создать уравнение линии регрессии и поместить его в верхний левый край графика рассеяния для каждой итерации.

library(gridExtra)
library(purrr)
library(tidyverse)

plot_5 <-
    Infil_Data2 %>% 
    split(.$Site_ID) %>% 
    map2(names(.),
         ~ggplot(.x, aes(Sqrt_Time.x, Cal_Vol_cm)) + 
         geom_point() +
         labs(title = paste(.y)) +
         theme(plot.title = element_text(hjust = 0.5)) + 
         stat_smooth(mapping = aes(x = Sqrt_Time.x, y = Cal_Vol_cm),
                     method = "lm", se = FALSE, 
                     formula = y ~ poly(x, 2, raw = TRUE),
                     color = "red") +
         theme(plot.margin = unit(c(1, 5, 1, 1), "cm")))


    pdf("allplots5.pdf", onefile = TRUE)
    walk(plot_5, print)
    dev.off()

Вот пример Infil_Data2 кадра данных, которым я являюсьиспользуя:

Infil_Data2 <-
    structure(list(Time = c(0L, 30L, 60L, 90L, 120L, 150L, 180L, 
    210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L, 
    210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L, 
    210L, 240L, 270L, 300L), Site_ID = c("H1", "H1", "H1", "H1", 
    "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H2", "H2", "H2", "H2", 
    "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H3", "H3", "H3", "H3", 
    "H3", "H3", "H3", "H3", "H3", "H3", "H3"), Vol_mL = c(63, 62, 
    60, 59, 58, 56, 54, 52.5, 50, 48.5, 46.5, 82, 77, 73, 68, 65, 
    51, 56, 52, 47.5, 42.5, 37.5, 69, 67, 65, 63, 61, 60, 58, 56, 
    54, 51.5, 49), Sqrt_Time.x = c(0, 5.477225575, 7.745966692, 9.486832981, 
    10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
    16.43167673, 17.32050808, 0, 5.477225575, 7.745966692, 9.486832981, 
    10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
    16.43167673, 17.32050808, 0, 5.477225575, 7.745966692, 9.486832981, 
    10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
    16.43167673, 17.32050808), Cal_Vol_cm = c(0, 0.124339799, 0.373019398, 
    0.497359197, 0.621698996, 0.870378595, 1.119058194, 1.305567893, 
    1.616417391, 1.80292709, 2.051606688, 0, 0.621698996, 1.119058194, 
    1.74075719, 2.113776588, 3.854533778, 3.232834782, 3.730193979, 
    4.289723076, 4.911422072, 5.533121068, 0, 0.248679599, 0.497359197, 
    0.746038796, 0.994718394, 1.119058194, 1.367737792, 1.616417391, 
    1.865096989, 2.175946488, 2.486795986)), row.names = c(NA, 33L
    ), class = "data.frame")

1 Ответ

0 голосов
/ 01 февраля 2019

Исходя из того, что вы сделали, и Добавление уравнения линии регрессии и R2 на графике , приведенный ниже код создает PDF-файл с одним графиком на страницу и с уравнением в графиках.Уравнения появляются в одном и том же относительном месте на графике, даже если масштаб меняется.Исходный код в вопросе был очень близок, и код ниже добавляет только вызов к stat_smooth_func.

# Input data.
Infil_Data2 <-
structure(list(Time = c(0L, 30L, 60L, 90L, 120L, 150L, 180L, 
210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L, 
210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L, 
210L, 240L, 270L, 300L), Site_ID = c("H1", "H1", "H1", "H1", 
"H1", "H1", "H1", "H1", "H1", "H1", "H1", "H2", "H2", "H2", "H2", 
"H2", "H2", "H2", "H2", "H2", "H2", "H2", "H3", "H3", "H3", "H3", 
"H3", "H3", "H3", "H3", "H3", "H3", "H3"), Vol_mL = c(63, 62, 
60, 59, 58, 56, 54, 52.5, 50, 48.5, 46.5, 82, 77, 73, 68, 65, 
51, 56, 52, 47.5, 42.5, 37.5, 69, 67, 65, 63, 61, 60, 58, 56, 
54, 51.5, 49), Sqrt_Time.x = c(0, 5.477225575, 7.745966692, 9.486832981, 
10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
16.43167673, 17.32050808, 0, 5.477225575, 7.745966692, 9.486832981, 
10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
16.43167673, 17.32050808, 0, 5.477225575, 7.745966692, 9.486832981, 
10.95445115, 12.24744871, 13.41640786, 14.49137675, 15.49193338, 
16.43167673, 17.32050808), Cal_Vol_cm = c(0, 0.124339799, 0.373019398, 
0.497359197, 0.621698996, 0.870378595, 1.119058194, 1.305567893, 
1.616417391, 1.80292709, 2.051606688, 0, 0.621698996, 1.119058194, 
1.74075719, 2.113776588, 3.854533778, 3.232834782, 3.730193979, 
4.289723076, 4.911422072, 5.533121068, 0, 0.248679599, 0.497359197, 
0.746038796, 0.994718394, 1.119058194, 1.367737792, 1.616417391, 
1.865096989, 2.175946488, 2.486795986)), row.names = c(NA, 33L
), class = "data.frame")

Код печати

# For the "stat_smooth_func", use the Laurae package.
# devtools::install_github("Laurae2/Laurae")

library(gridExtra)
library(purrr)
library(tidyverse)
library(Laurae)

plot_5 <-
    Infil_Data2 %>% 
    split(.$Site_ID) %>% 
    map2(names(.),
         ~ggplot(.x, aes(Sqrt_Time.x, Cal_Vol_cm)) + 
         geom_point() +
         labs(title = paste(.y)) +
         theme(plot.title = element_text(hjust = 0.5)) + 
         stat_smooth(mapping = aes(x = Sqrt_Time.x, y = Cal_Vol_cm),
                     method = "lm", se = FALSE, 
                     formula = y ~ poly(x, 2, raw = TRUE),
                     color = "red") +
         theme(plot.margin = unit(c(1, 5, 1, 1), "cm")) +
         stat_smooth_func(geom="text", method = "lm", hjust=0, parse=TRUE))


pdf("allplots5.pdf", onefile = TRUE)
walk(plot_5, print)
dev.off()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...