Я пытаюсь построить регрессионную информацию о некоторых граненых точечных диаграммах с помощью geom_text. В частности, я хотел бы отобразить информацию: R2, р-значение и уравнение регрессии. Я хочу, чтобы каждый из них был в отдельных строках. Я не смог сделать это успешно, поскольку столкнулся с двумя проблемами:
- Мне нужно установить
parse = TRUE
в geom_text
, чтобы верхний индекс R ^ 2 быть правильно отображен. Однако при этом символы после символа новой строки не отображаются. Этого не происходит, если parse = FALSE
, но он мне нужен для надстрочного индекса. Что вызывает это поведение? Как я могу это исправить? - Для уравнения регрессии, представленного как
y = b + ax
, я получаю неожиданный символ ошибка, указывающая на x в концеуравнение. Например, для MWE, показанного ниже, возвращается следующая ошибка:
Ошибка разбора (text = text [[i]]):: 3: 42: неожиданный символ
2: p == 1.4898364962951e-12
3: y == 8.28390564178717 + 0.165567574644319x
^
Почему я получаю эту ошибку при добавлении символав конце числа? Добавление пробела между числами и x не решает проблему. Опять же, установка parse = FALSE
устраняет проблему. Я явно что-то упускаю из-за того, как parse
работает.
MWE:
# Load data
cars.df <- cars
# Fit linear regression model:
fit <- lm(data = cars.df, speed ~ dist)
# Create a new dataframe to plot regression information with geom_text:
fit.labs <- data.frame(x = 100, y = 12, lab = paste0("R^2 == ",
summary(fit)$r.squared,
"\np == ",
summary(fit)$coefficients[8]))
library(ggplot2)
# Plot data + regression line + label
ggplot() +
geom_point(data = cars.df, aes(x = dist, y = speed)) +
geom_abline(slope = summary(fit)$coefficients[2],
intercept = summary(fit)$coefficients[1]) +
geom_label(data = fit.labs, aes(x = x, y = y, label = lab), parse = TRUE)
# Characters after the newline are not displayed. It does not happen if parse is set to FALSE.
# New df to add regression equation:
fit.labs2 <- data.frame(x = 100, y = 12, lab = paste0("R^2 == ",
summary(fit)$r.squared,
"\np == ",
summary(fit)$coefficients[8],
"\ny == ",
summary(fit)$coefficients[1],
" + ",
summary(fit)$coefficients[2],
"x"))
ggplot() +
geom_point(data = cars.df, aes(x = dist, y = speed)) +
geom_abline(slope = summary(fit)$coefficients[2],
intercept = summary(fit)$coefficients[1]) +
geom_text(data = fit.labs2, aes(x = x, y = y, label = lab), parse = TRUE)