如何更改 R 中 ggrepel 的背景?

How to change background in ggrepel in R?

我在数据可视化方面遇到了问题。

我的代码如下所示:

t <- structure(list(occurrences_article = c(4, 11, 6, 5, 4, 7, 8, 2, 4, 4, 11, 3, 6, 10, 2, 1, 2),
                    score = c(2, 1.76, 0.9, 1.875, 1.93, 1.92, 1.42, 1.5, 1.6, 1.75, 1.29, 1.5, 2, 1.65, 2, 2, 2
                    ), 
                    Barrier_code = c("information", "beliefs", "trust", "lack_traditional_motivations", "perceived_quality", "proximity", "shortage", "access_criteria", "functioning", "perceived_accessibility", "fees", "perceived_affordability", "lack_of_subsidies", "cultural_ressources", "social_ressources", 
                                     "sustainability", "satisfaction"), 
                    Quality_coded = structure(c(1L, 3L, 1L, 2L, 3L, 2L, 3L, 1L, 3L, 2L, 2L, 2L, 3L, 1L, 1L, 3L, 2L
                    ), .Label = c("Low", "Medium", "High"), class = "factor"), treatable_behavioral_intervention = c(1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1)), row.names = c(NA, -17L), class = c("tbl_df", "tbl", "data.frame"))

library(ggplot2)
library(tidyverse)
library(ggrepel)
library(RColorBrewer)

t$Barrier_code <- as.factor(t$Barrier_code)
t$score <- as.numeric(t$score)
t$Quality <- as.numeric(t$Quality)
t$Quality_coded <- as.factor(t$Quality_coded)

ggplot(t, aes(occurrences_article, score, label = Barrier_code, colour = Quality_coded))+
  geom_point(size =2)+
  geom_label_repel(aes(label = Barrier_code, fill = levels(t$treatable_behavioral_intervention), color = "black"))+ 
  scale_color_brewer(palette = "RdYlGn")


但是生成的图表并不令人满意see

问题是我想用两种不同的颜色更改标签的背景,这取决于 treatable_behavioral_intervention 的两个级别(+ scale_fill_manual(values = setNames(c("lightblue","darkgreen"), levels(t$treatable_behavioral_intervention))) 的尝试失败,也是为了使黄色标签可读.. 你能帮帮我吗?

我想这更像是一个打字错误 - 你走在了正确的轨道上。您的代码与已发布的 运行 不符(您的数据存在很大差距,但没关系)。

避免在 aes 中使用 $,我不太确定您为什么要使用 levels...

不要!只需使用 as.factor(variable)。或者也可以 as.character.

library(ggrepel)
#> Loading required package: ggplot2

t <- structure(list(occurrences_article = c(4, 11, 6, 5, 4, 7, 8, 2, 4, 4, 11, 3, 6, 10, 2, 1, 2),
                    score = c(2, 1.76, 0.9, 1.875, 1.93, 1.92, 1.42, 1.5, 1.6, 1.75, 1.29, 1.5, 2, 1.65, 2, 2, 2
                    ), 
                    Barrier_code = c("information", "beliefs", "trust", "lack_traditional_motivations", "perceived_quality", "proximity", "shortage", "access_criteria", "functioning", "perceived_accessibility", "fees", "perceived_affordability", "lack_of_subsidies", "cultural_ressources", "social_ressources", 
                                     "sustainability", "satisfaction"), 
                    Quality_coded = structure(c(1L, 3L, 1L, 2L, 3L, 2L, 3L, 1L, 3L, 2L, 2L, 2L, 3L, 1L, 1L, 3L, 2L
                    ), .Label = c("Low", "Medium", "High"), class = "factor"), treatable_behavioral_intervention = c(1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1)), row.names = c(NA, -17L), class = c("tbl_df", "tbl", "data.frame"))


t$Barrier_code <- as.factor(t$Barrier_code)
t$score <- as.numeric(t$score)
t$Quality_coded <- as.factor(t$Quality_coded)

ggplot(t, aes(occurrences_article, score, label = Barrier_code, colour = Quality_coded))+
  geom_point(size =2)+
  geom_label_repel(aes(label = Barrier_code, 
                       fill = as.factor(treatable_behavioral_intervention)# that's the trick
                       ), # changed bracket
                       color = "black")+ 
  scale_color_brewer(palette = "RdYlGn") +
  scale_fill_brewer()

或者,手动定义颜色:

ggplot(t, aes(occurrences_article, score, label = Barrier_code, colour = Quality_coded))+
  geom_point(size =2)+
  geom_label_repel(aes(label = Barrier_code, 
                       fill = as.factor(treatable_behavioral_intervention)# that's the trick
  ), # changed bracket
  color = "black")+ 
  scale_color_manual(values = c("Red", "Yellow", "Green")) +
  scale_fill_brewer()