使用 ggplot 定义 alpha 以突出显示单个点

Define alpha using ggplot to highlight single points

可重现代码:

library(ggplot2)
library(data.table)

x = rnorm(10000, 0, 1)
y = rnorm(10000, 0, 1)

dat = data.table(x,y)
dat[,id := as.character(1:.N)]

ALPHA = 0.2 

dat[,alpha := ifelse(id == 42, 1, ALPHA)]
alpha2 = unique(dat[,list(id, alpha)])
alpha = alpha2[,alpha]
names(alpha) = dat[,id] 

u = ggplot(dat, aes(x, y, alpha = id)) + geom_point()
u = u + scale_alpha_manual(values = alpha, guide = FALSE) 
u

输出:

问题:

id = 42 的点没有突出显示,连续的 alpha 值仍然应用于所有观察。我只想看到 id = 42 的点的 alpha 为 1,其余所有点的固定值为 alpha = 0.2。

您可以通过将 alpha 列映射到 alpha 审美并使用 scale_alpha_identity:

来实现您想要的结果

注意 1:我将点数设置为 100,否则几乎不可能看到此方法有效。

注意 2:恕我直言,使用不透明度并不是突出一个点的最佳方式,尤其是在点数很多的情况下。

library(ggplot2)
library(data.table)

set.seed(1)

x = rnorm(100, 0, 1)
y = rnorm(100, 0, 1)

dat = data.table(x,y)
dat[,id := as.character(1:.N)]

ALPHA = 0.2 

dat[,alpha := ifelse(id == 42, 1, ALPHA)]
alpha2 = unique(dat[,list(id, alpha)])
alpha = alpha2[,alpha]
names(alpha) = dat[,id] 

ggplot(dat, aes(x, y, alpha = alpha)) + 
  geom_point() + 
  scale_alpha_identity(guide = FALSE)
#> Warning: It is deprecated to specify `guide = FALSE` to remove a guide. Please
#> use `guide = "none"` instead.

另一种选择是使用注释。由于使用 alpha = 0.2, 时可见性不是很好,我将其涂成红色(但也可以使用 alpha 参数)。

library(ggplot2)
library(data.table)

x = rnorm(10000, 0, 1)
y = rnorm(10000, 0, 1)

dat = data.table(x,y)
dat[,id := as.character(1:.N)]

alphapoint <- 42

ggplot(dat, aes(x, y)) + 
  geom_point(alpha = 0.2) +
  annotate("point",
           dat$x[alphapoint],
           dat$y[alphapoint],
           color = "red",
           size = 4)

使用阿尔法:

ggplot(dat, aes(x, y)) + 
  geom_point(alpha = 0.05) +
  annotate("point",
           dat$x[alphapoint],
           dat$y[alphapoint],
           alpha = 1)