使用 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)
可重现代码:
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)