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()

enter image description here


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: enter image description here

Tags:

R

Ggplot2

Ggrepel