ggrepel label with transparent background but visible font
Plot two labels, the second with no fill at all. Set the seed to make sure they perfectly overlap. (Using geom_text_repel
doesn't seem to work as the repelling works slightly different.)
ggplot(df, aes(x, y)) +
geom_point(alpha=.3) +
geom_label_repel(aes(label=label),
label.size = NA,
alpha = 0.6,
label.padding=.1,
na.rm=TRUE,
seed = 1234) +
geom_label_repel(aes(label=label),
label.size = NA,
alpha = 1,
label.padding=.1,
na.rm=TRUE,
fill = NA,
seed = 1234) +
theme_bw()
ggplot(df, aes(x, y)) +
geom_point(alpha=.3) +
geom_label_repel(aes(label=label),
label.size = NA,
label.padding=.1,
na.rm=TRUE,
fill = alpha(c("white"),0.5))
This worked for me. You can set alpha with a color. Since the fill setting is only the background the text is unaffected. The advantage of this to overlaying the text is you can still use the "repel" to keep text from overlapping and not have to worry about getting two layers lining up properly
Maybe something like the following one:
library(ggplot2)
library(ggrepel)
library(stringi)
set.seed(1)
df <- data.frame(x=rnorm(10000),
y=rnorm(10000),
label=NA)
df$label[1:26] <- stringi::stri_rand_strings(26,8)
ggplot(df, aes(x, y)) +
geom_point(alpha=.3) +
geom_label_repel(aes(label=label),
label.size = NA,
alpha = 0.75,
fontface = 'bold', color = 'black',
box.padding = 0.80, point.padding = 0.5,
na.rm=TRUE) +
theme_bw()
which gives: