基于条件的ggplot标签颜色

ggplot label color based on condition

我正在尝试根据条件更改颜色 geom_label_repel。例如:

res <- data.frame(group = c("Group 1", "Group 2", "Group 3", "Group 4", "Group 5"),
                 correlation = c(0.37,0.33,0.31,0.30,0.30))
res <- res %>%
  arrange(desc(correlation))

res

  group correlation
1 Group 1        0.37
2 Group 2        0.33
3 Group 3        0.31
4 Group 4        0.30
5 Group 5        0.30

我想标记相关值最高的三个组。然后,如果后续组之间的差异> 0.03,我想更改具有最高相关值的点的颜色。我的代码现在给了我这个情节

p <- res %>%
  ggplot(aes(x = reorder(group, -correlation), y = correlation)) +
  geom_point() +
  geom_label_repel(data = slice_max(res, n = 3, correlation),
                   aes(label = group))

现在,我想更改第 1 组标签的颜色,因为它的相关值比第 2 组的相关值 > 0.03。任何帮助将不胜感激

我们可以根据条件添加一个辅助列来做到这一点:

library(tidyverse); library(ggrepel)
res <- res %>%
  arrange(desc(correlation)) %>%
  mutate(my_col = if_else(
    row_number() == 1 & correlation > lead(correlation) + 0.03,
    "highlight",
    "other"
  )) 


res %>%
  ggplot(aes(x = group, y = correlation, color = my_col)) +
  geom_point() +
  geom_label_repel(data = slice_max(res, n = 3, correlation),
                   aes(label = group)) +
  scale_color_manual(values = c("highlight" = "red", "other" = "black")) +
  guides(color = "none")    # optional, hides legend