如果我对您的理解正确,您想在同一位置绘制来自两个不同组的两个点,但是这两个组的颜色不同。每个点的 alpha 将由第四个连续变量控制,因此每个绘制位置的表观颜色将是两种颜色的混合,根据第四个变量加权。
这有点有效,但没有你希望的那么好,原因有很多。
首先,您提供的数据太不平衡,不利于第二组,所以点基本上都会显示为蓝色。因此,我们需要 pixel.intensity 变量的不同值来显示效果确实有效:
library(ggplot2)
df <- structure(list(coordX = c(5, 10, 15, 20, 5, 10, 15, 20), coordY = c(5,
10, 20, 30, 5, 10, 20, 30), variable = structure(c(1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L), .Label = c("var1", "var2"), class = "factor"),
pixel.intensity = c(0, 0.42, 0.51, 0.02, 0.34, 0.1, 0.15,
0.28)), row.names = c(NA, -8L), class = "data.frame")
ggplot(df, aes(x = coordX, y = coordY)) +
geom_point(aes(alpha = pixel.intensity, color = variable), size = 5) +
scale_alpha_identity()
您可以看到,除了灰色、褪色的色调之外,您需要在 alpha 上有很大的差异。此外,如果两个 alpha 值都较低,则这些点会非常微弱。
编辑
从 OP 的 cmets 可以看出,我们实际上是在讨论混合 RGB 颜色。在这种情况下,假设我们有以下数据框,红色、蓝色和绿色的强度在 0 和 1 之间缩放:
red <- rep(c(seq(0, 1, 0.1), rep(1, 10)), 21)
green <- rep(c(rep(1, 10), seq(1, 0, -0.1)), 21)
blue <- rev(rep(c(seq(0, 1, 0.1), rep(1, 10)), each = 21))
red <- red * rev(blue)
green <- green * rev(blue)
x <- rep(0:20, 21)
y <- rep(0:20, each = 21)
df <- data.frame(x, y, red, blue, green)
然后我们可以通过简单地绘制 rgb 值;
df$rgb <- rgb(red, green, blue)
ggplot(df, aes(x, y, color = rgb)) + geom_point(size = 5) + scale_color_identity()
或者如果您想实际模拟像素:
ggplot(df, aes(x, y, fill = rgb)) + geom_tile() + scale_fill_identity()
由reprex package (v0.3.0) 于 2020 年 8 月 2 日创建