具有透明背景但可见字体的 ggrepel 标签
ggrepel label with transparent background but visible font
有没有什么技巧可以让字体在 '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()
可能像下面这样:
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()
给出:
绘制两个标签,第二个标签完全没有填充。设置种子以确保它们完全重叠。 (使用 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()
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。由于填充设置只是背景,文本不受影响。覆盖文本的好处是您仍然可以使用 "repel" 来防止文本重叠,而不必担心让两层正确排列
有没有什么技巧可以让字体在 '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()
可能像下面这样:
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()
给出:
绘制两个标签,第二个标签完全没有填充。设置种子以确保它们完全重叠。 (使用 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()
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。由于填充设置只是背景,文本不受影响。覆盖文本的好处是您仍然可以使用 "repel" 来防止文本重叠,而不必担心让两层正确排列