Я пытался следовать вашему пути и сделал следующее. Я не знаком с gghighlight()
. Я бросил быстрый взгляд и подумал, что вам нужно будет использовать логические проверки для выделения определенных групп. Если вы можете настроить логические проверки, я думаю, вы можете использовать функцию. В своем вопросе вы просто упомянули, что хотите выделить определенные c группы. Один из способов, которым вы можете воспользоваться, - назначить цвета с помощью scale_color_identity()
. Я создал образец данных ниже. Я в основном назначил red
трем группам (т.е. 1, 3, 5) в mutate()
. Другие группы получили gray50
в столбце, color
.
library(tidyverse)
guidelines <- tibble(step = rep(c("First", "Highest", "Final"), times = 5),
type = c(2, 4, 4, 2, 4, 4, 4, 4, 4, 2, 4, 2, 1, 3, 3),
grp = rep(1:5, each = 3))
mutate(guidelines,
step = factor(step, levels = c("First", "Highest", "Final")),
color = if_else(grp %in% c(1, 3, 5), "red", "gray50")) -> guidelines
ggplot(data = guidelines, aes(x = step, y = type, color = color, group = grp)) +
geom_line(linetype = 1, position = position_jitter(w = 0, h = 0.05)) +
scale_color_identity(guide = "legend", labels = c("Other groups", "Group 1, 3, 5")) +
scale_y_continuous(breaks = c(1,2,3,4),
labels = c("Method 1", "Method 2", "Method 3", "Method 4"))
Потенциальное решение с gghighlight
У меня нет ваших данных. Так что эта идея может / не может работать. Но у меня возникла следующая идея. Я изменил guidelines
еще раз. Я создал новую непрерывную переменную (т.е. пустышку), которую я использую для оси X. Это немного искажает, поскольку у нас должна быть категориальная переменная на оси. Но это необходимо, если вы хотите использовать gghighlight
. Насколько я понял gghighlight
, нам нужны логические проверки в функции. Здесь я хотел выделить строки, максимальное значение которых равно 3. Это выделяет группу 5. Так как вы хотите иметь две категориальные переменные, мы должны изменить имена на осях x и y. Если вы можете настроить логические проверки для двух групп в ваших данных (16 и 32), я думаю, что вы можете использовать эту идею.
library(gghighlight)
mutate(guidelines,
dummy = recode(.x = step, First = 1, Highest = 2, Final = 3),
step = factor(step, levels = c("First", "Highest", "Final")),
color = if_else(grp %in% c(1, 3, 5), "red", "gray50")) -> guidelines
ggplot(data = guidelines, aes(x = dummy, y = type, color = color, group = grp)) +
geom_line(size = 2, linetype = 1) +
gghighlight(max(as.numeric(type)) == 3, label_key = grp) +
labs(x = "Step", y = "Type") +
scale_x_continuous(breaks = c(1,2,3),
labels = c("First", "Highest", "Final")) +
scale_y_continuous(breaks = c(1,2,3,4),
labels = c("Method 1", "Method 2", "Method 3", "Method 4"))