Как добавить сложный ярлык с курсивом и переменной в ggplot?
Я прочитал много сообщений на эту тему, используя expression()
, paste()
, а также bquote()
или какая-то комбинация. Я думаю, что близок к решению моей проблемы, но я просто не могу туда добраться. Следующий скрипт генерирует график, помеченный как "y = 1 + 2(x); r^2= 0.9". Как я могу выделить курсивом "y" и "x", выделить курсивом "r" и верхний индекс 2 в "r^2"? Если я пропустил релевантный предыдущий пост, извините, но, пожалуйста, направьте его мне.
df <- data.frame(x=c(1:5), y=c(1:5))
a <- 1
b <- 2
r2 <- 0.9
eq <- paste("y = ", a, " + ", b, "(x); r^2=", r2)
ggplot(data=df, aes(x=x, y=y))+
geom_point(color="black")+
geom_text(x=2, y=4,label=eq, parse=FALSE)
3 ответа
Вы могли бы использовать annotate()
что позволяет вставлять прямо в сюжет.
library(ggplot2)
ggplot(data=df, aes(x=x, y=y)) +
geom_point(color="black") +
annotate('text', 2.5, 4,
label=paste("italic(y)==", a, "+", b,
"~italic(x)~';'~italic(r)^2==", r2),
parse=TRUE,
hjust=1, size=5)
Урожайность:
Данные:
df <- data.frame(x=c(1:5), y=c(1:5))
a <- 1
b <- 2
r2 <- 0.9
Вы можете использовать комбинацию substitute
а также plotmath
( https://www.rdocumentation.org/packages/grDevices/versions/3.5.1/topics/plotmath), чтобы выделить текст
# setup
set.seed(123)
library(ggplot2)
# dataframe
df <- data.frame(x = c(1:5), y = c(1:5))
# label
eq <- substitute(
expr =
paste(
italic("y"),
" = ",
a,
" + ",
b,
"(",
italic("x"),
"); ",
italic("r") ^ 2,
" = ",
r2
),
env = base::list(a = 1,
b = 2,
r2 = 0.9)
)
# plot
ggplot(data = df, aes(x = x, y = y)) +
geom_point(color = "black") +
labs(subtitle = eq)
Создано 2018-12-04 пакетом представлением (v0.2.1)
В дополнение к ответу Indrajeet Patil & jaySf, я хотел бы добавить, что существует автоматический способ подгонки линий регрессии (я думаю, что их много), используя пакет ggpmisc. Буквы, которые вы хотите курсивом, уже отформатированы таким образом. Код, который необходимо использовать:
> install.packages('ggpmisc'); library(ggpmisc); formula <- y ~ x
> df <- data.frame(x=c(1:5), y=c(1:5))
> ggplot(data = df, aes(x, y)) + geom_point(color="black") +
geom_smooth(method = "lm", formula = formula) +
stat_poly_eq(aes(label = paste(..eq.label.., ..adj.rr.label.., sep = "~~~~")),
formula = formula, parse = TRUE)
Это также показывает подгонянные линии, которые, я надеюсь, не являются препятствием для главной цели.
РЕДАКТИРОВАТЬ: линия может быть удалена с помощью
linetype = 0
совместим с большинствомaesthetics
вggplot2
,
... + geom_smooth(method = "lm", formula = formula, linetype = 0) + ...