Можно ли вывести информацию из stat_poly_eq() в подзаголовке ggplot?

Вопрос или проблема

Можно ли вывести информацию из stat_poly_eq() в подзаголовке ggplot?

Существует ли способ переместить выходную информацию из stat_poly_eq() в подзаголовок? Или это невозможно? Мне нужно создать около 60 графиков, и было бы здорово иметь эту возможность!

Я пытался переместить это с помощью ggtitle(), но безуспешно. Я также пробовал переместить stat_poly_eq, редактируя theme(), но это тоже не дало результатов.

Пакеты:

library(ggplot2)
library(ggpmisc)

Данные:

t1c11<-structure(list(Year = c(2000, 2001, 2002, 2003, 2004, 2000, 2001, 
2002, 2003), TreeCover = c(48.852632, 50.463158, 51.294737, 52.663158, 
52.747368, 57, 54.6, 42.066667, 51), TC_Avg3 = c(NA, 50.203509, 
51.4736843333333, 52.2350876666667, 52.045614, NA, 51.2222223333333, 
49.2222223333333, 47.8), Type = structure(c(30L, 30L, 30L, 30L, 
30L, 1L, 1L, 1L, 1L), levels = c("C 1-1", "C 1-2", "C 1-3", "C 1-4", 
"C 1-5", "C 1-6", "C 2-1", "C 2-2", "C 2-3", "C 2-4", "C 3-1", 
"C 3-2", "C 3-3", "C 3-4", "C 4-1", "C 4-2", "C 4-3", "C 4-4", 
"C 5-1", "C 5-2", "C 5-3", "C 6-1", "C 6-2", "C 6-3", "C 6-4", 
"C 7-1", "C 7-2", "C 7-3", "C 7-4", "T 1", "T 2"), class = "factor")), row.names = c(1L, 
2L, 3L, 4L, 5L, 47L, 48L, 49L, 50L), class = "data.frame")

График:

ggplot(t1c11, aes(x=Year, y=TC_Avg3, colour = Type)) +
  geom_point() +
  geom_smooth(span=2) +
  scale_colour_manual(values=c('#7a7a7a','#2c9399'))+
  stat_poly_eq(use_label(c("eq", "R2", "p")))+
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))+
  ggtitle(label = "Тест")

Заранее спасибо!

Ответ или решение

Конечно! Для того чтобы переместить текстовое содержание, полученное с помощью функции stat_poly_eq(), в подзаголовок графика в ggplot2, вам нужно будет использовать другой подход, поскольку stat_poly_eq() по умолчанию отображает свои результаты на графике. Однако можно извлечь текстовое значение, которое вы хотите отобразить, и затем передать его в функцию ggtitle() или labs() для создания заголовка и подзаголовка.

Ниже представлен пример, который демонстрирует, как это можно сделать:

  1. Подсчитайте параметры уравнения линии регрессии (напр., коэффициенты, R² и p-значение).
  2. Сформируйте строку с нужной информацией.
  3. Используйте эту строку как подзаголовок в графике.

Вот пример кода, который выполняет описанные шаги:

library(ggplot2)
library(ggpmisc)
library(dplyr)

# Данные
t1c11 <- structure(list(
  Year = c(2000, 2001, 2002, 2003, 2004, 2000, 2001, 2002, 2003), 
  TreeCover = c(48.852632, 50.463158, 51.294737, 52.663158, 52.747368, 
                57, 54.6, 42.066667, 51),
  TC_Avg3 = c(NA, 50.203509, 51.4736843333333, 52.2350876666667, 
              52.045614, NA, 51.2222223333333, 49.2222223333333, 47.8), 
  Type = structure(c(30L, 30L, 30L, 30L, 30L, 1L, 1L, 1L, 1L), 
                   levels = c("C 1-1", "C 1-2", "C 1-3", "C 1-4", 
                              "C 1-5", "C 1-6", "C 2-1", "C 2-2", 
                              "C 2-3", "C 2-4", "C 3-1", "C 3-2", 
                              "C 3-3", "C 3-4", "C 4-1", "C 4-2", 
                              "C 4-3", "C 4-4", "C 5-1", "C 5-2", 
                              "C 5-3", "C 6-1", "C 6-2", "C 6-3", 
                              "C 6-4", "C 7-1", "C 7-2", "C 7-3", 
                              "C 7-4", "T 1", "T 2"), class = "factor")), 
  row.names = c(1L, 2L, 3L, 4L, 5L, 47L, 48L, 49L, 50L), class = "data.frame")

# Подходящие параметры для подзаголовка
model <- lm(TC_Avg3 ~ Year, data = t1c11)

# Вычисление статистики
summary_model <- summary(model)
coeffs <- summary_model$coefficients
r_squared <- summary_model$r.squared
p_value <- coeffs[2, 4] # p-value для переменной Year

# Формат строки для подзаголовка
subtitle_text <- paste("y =", round(coeffs[2, 1], 2), "*x +", round(coeffs[1, 1], 2), 
                       ", R² =", round(r_squared, 3), 
                       ", p =", round(p_value, 3))

# Построение графика
ggplot(t1c11, aes(x = Year, y = TC_Avg3, colour = Type)) +
  geom_point() +
  geom_smooth(span = 2) +
  scale_colour_manual(values = c('#7a7a7a', '#2c9399')) +
  ggtitle(label = "Тест", subtitle = subtitle_text) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

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

Оцените материал
Добавить комментарий

Капча загружается...