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

3hvapo4f  于 2023-02-06  发布在  其他
关注(0)|答案(4)|浏览(185)

有没有什么窍门可以让字体在'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()

k97glaaz

k97glaaz1#

绘制两个标签,第二个完全不填充。设置种子以确保它们完全重叠。(使用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()

eivnm1vs

eivnm1vs2#

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

这对我很有效。你可以用颜色设置alpha。因为填充设置只是背景,文本不受影响。这样覆盖文本的好处是你仍然可以使用“排斥”来防止文本重叠,而不必担心两个图层是否正确对齐

r1zk6ea1

r1zk6ea13#

也许像下面这样:

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

其给出:

ifmq2ha2

ifmq2ha24#

添加到@spiketheaardvark,如果您收到如下错误
check_aesthetics()中的错误:! Aesthetics的长度必须为1或与数据相同(8):填充
然后从alpha中删除c()
车削
fill = alpha(c("white"),0.5)
变成
fill = alpha("white", 0.5)
这个错误是由c()同时调用实心白和透明白引起的,没有它就只是调用透明白

相关问题