具有透明背景但可见字体的ggrepel标签

drm*_*iod 6 r ggplot2 ggrepel

是否有某种技巧可以在'geom_label_repel'中获得字体,alpha=1但是背景可能alpha=.2呢?

我的问题是,有时我的地块非常密集。如果我仅使用文本,则该文本不再可读。如果我使用的标签不透明,则标签可读性很好,但在标签后面看不到。如果我选择标签的透明度,那么字体将不再可读,因为它也是透明的,并且与背景的对比度不足。

我真正想要的是字体周围的白色阴影:-)

这是一个演示问题的最小示例。

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.6, 
                   label.padding=.1, 
                   na.rm=TRUE) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Axe*_*man 8

绘制两个标签,第二个标签完全没有填充。设置种子以确保它们完全重叠。(使用geom_text_repel似乎无效,因为排斥效果略有不同。)

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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 啊,“种子”是个好主意...谢谢,这样,它的工作原理就与预期的一样。 (2认同)

小智 7

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))
Run Code Online (Sandbox Code Playgroud)

这对我有用。您可以使用颜色设置 alpha。由于填充设置只是背景,因此文本不受影响。叠加文本的优点是您仍然可以使用“排斥”来防止文本重叠,而不必担心让两层正确对齐


Sci*_*rlo 5

也许类似于以下内容:

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()
Run Code Online (Sandbox Code Playgroud)

这使: 在此处输入图片说明