Вопрос или проблема
Можно ли вывести информацию из 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()
для создания заголовка и подзаголовка.
Ниже представлен пример, который демонстрирует, как это можно сделать:
- Подсчитайте параметры уравнения линии регрессии (напр., коэффициенты, R² и p-значение).
- Сформируйте строку с нужной информацией.
- Используйте эту строку как подзаголовок в графике.
Вот пример кода, который выполняет описанные шаги:
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))
Этот код сначала создает линейную модель для ваших данных и вычисляет параметры, которые затем используются для формирования подзаголовка. Таким образом, вы можете легко адаптировать данный процесс для генерации большого количества графиков с нужной информацией в подзаголовке.