Я хотел бы иметь разные аннотации (например, p-значения) для каждого аспекта (по одному для каждого наклона моего фактического графика - всего 6). Думаю, я прочитал все сообщения об аннотировании фасетов, наиболее полезными из которых, конечно же, являются main Аннотирование текста на отдельном фасете в ggplot2. Но в моей ситуации это выкидывает ошибки.
Я использую пакет interactions
, который предоставляет доступный для редактирования объект ggplot
, но вызывает другие проблемы. Вот минимально воспроизводимый пример с использованием mtcars
.
# Create the model
mod1 <- lm(wt ~ am * drat * vs, data = mtcars)
# Make the plot
require(interactions)
(p <- interact_plot(mod1,pred="am",modx="drat",mod2="vs"))
# Make annotations dataframe
(dat_text <- data.frame(
text = c("p-value 1", "p-value 2"),
vs = c(0, 1)))
# Add annotations to dataframe
require(ggplot2)
p + geom_text(
data = dat_text,
mapping = aes(x = -Inf, y = -Inf, label = text),
hjust = -0.1,
vjust = -1
)
Это дает: Error in FUN(X[[i]], ...) : object 'modx_group' not found
. Также такая же ошибка с 'drat' not found
. Я не слишком уверен, как справиться с этой ошибкой (например, какие значения их установить), поэтому я попытался добавить эти столбцы в фрейм данных следующим образом:
# Make annotations dataframe
(dat_text <- data.frame(
text = c("p-value 1", "p-value 2"),
vs = c(0, 1),
modx_group = c("-1 SD", "+ 1 SD"), # Here ***
drat = c(-1,1))) # Here ***
# Add annotations to dataframe
p + geom_text(
data = dat_text,
mapping = aes(x = -Inf, y = -Inf, label = text),
hjust = -0.1,
vjust = -1
)
Но это дает: Insufficient values in manual scale. 4 needed but only 3 provided
. Установка modx_group
и drat
на NA
, NA_real_
или даже 0
, как указано в другое сообщение, появляется еще одна ошибка: Discrete value supplied to continuous scale
.
Я не могу понять эти ошибки в текущем контексте. Я подозреваю, конечно, что это связано с тем, что сюжетный объект interactions
был напуган. Также, вероятно, есть что-то очевидное, что я делаю неправильно, но не вижу. Любая помощь будет оценена по достоинству!
Редактировать
Основываясь на ответе @tefan, я смог создать желаемый результат для моего более сложного проекта (с 6 p-значениями, по одному для каждого наклона и конкретными позициями для каждой аннотации), как показано ниже.
<!-- language-all: lang-r -->
# Create the model
mod1 <- lm(wt ~ am * drat * vs, data = mtcars)
# Make the plot
require(interactions)
#> Loading required package: interactions
(p <- interact_plot(mod1,pred="am",modx="drat",mod2="vs"))
# Make annotations dataframes
dat_text <- data.frame(
text = c("p-value 3", "p-value 6", "p-value 2", "p-value 5", "p-value 1", "p-value 4"),
mod2_group = c("vs = 0", "vs = 1", "vs = 0", "vs = 1", "vs = 0", "vs = 1"),
x = c(0.5, 0.5, 0.5, 0.5, 0.5, 0.5),
y = c(3, 2.5, 3.5, 2.75, 4, 3))
# Add annotations to dataframe
require(ggplot2)
#> Loading required package: ggplot2
p + geom_text(data = dat_text,
mapping = aes(x = x, y = y, label = text),
inherit.aes = FALSE)
Создано 10 июня 2020 г. пакетом REPEX (v0.3.0)