在R中,是否可以在绘图中叠加2种颜色以产生第3种颜色(例如,使用加法或减色混合)

And*_*rew 20 graphics rgb r colors

我想用2类数据做一个散点图,一个用黄色绘制,一个用蓝色绘制,它们以绿色显示在它们叠加的位置(或任何其他组合).我发现即使透明度,事情也有点困难.图表的颜色受空间中绘制的最后一个点是蓝色还是黄色的影响.

例如,使用以下代码:

col1 <- rgb(red = .0, green = 0, blue = 0.8, alpha = 0.8)
col2 <- rgb(red = .8, green = 0.8, blue = 0, alpha = 0.8)
circle <- data.frame(x = c(0.2,0), 
                    y = c(0,0),
                    col = c(col1, col2),
                    stringsAsFactors = F)
orders <- c(1,2)
plot(x = circle$x[orders], y = circle$y[orders],
     col = circle$col[orders], pch = 19, cex = 100, xlab = "", ylab = "")
Run Code Online (Sandbox Code Playgroud)

根据您设置矢量的方式orders(设置绘制两个大点的方向),您会得到不同的结果: 在此输入图像描述

如果你交换顺序绘制两个圆圈的顺序,你会得到: 在此输入图像描述

无论哪种方式,我都期待混合颜色以获得绿色.有没有办法做到这一点?谢谢!

编辑 - 这两个图是使用pdf设备制作的.我也尝试通过tikzDevice运行代码,看看是否有效,但事实并非如此.

42-*_*42- 5

pdf()设备的帮助文件说背景的默认设置是"透明",虽然这在实践中似乎不是它的行为,可能是因为观看者假设是白色背景或者因为绘图函数的默认设置是"白色".中间部分首先变成白色和绿色相等混合的颜色,然后第二然后加上蓝色.所以我猜测数学会预测rgb值为(0.5,0.5,(0.5 + 0.8)/ 2),然后将混合物与叠加的颜色混合我认为白色+ col1以相等的比例添加到来自col2的值使得数学不可交换.无论如何,如果您可以强制背景"透明",最终结果可能会有所不同.默认行为更像是混合涂料而不是像闪亮的剧院灯.

PDF颜色模型在http://www.adobe.com/devnet/pdf/pdf_reference.html中有所描述,它将决定您对pdf设备的期望(但不一定是观众将提供的内容).

我通过将背景更改为"黑色"来测试我的理论,即白色背景是问题(并且似乎已经反驳了它),希望层叠的rgb向量没有附加值:

pdf("testfil12rev.pdf", bg="black")
 col1 <- rgb(red = .0, green = 0, blue = 1, alpha = 0.5)
 col2 <- rgb(red = 1, green = 0, blue = 0, alpha = 0.5)
 circle <- data.frame(x = c(0.2,0), 
                     y = c(0,0),
                     col = c(col1, col2),
                     stringsAsFactors = F)
 orders <- c(1,2)
plot(x = circle$x[orders], y = circle$y[orders], bg="black",
      col = circle$col[orders], pch = 19, cex = 100, xlab = "", ylab = "")

 dev.off()
Run Code Online (Sandbox Code Playgroud)

反转"订单"指标也不会产生具有黑色背景的相同混合颜色.

编辑:有一个先前的SO帖子,其中包含混合颜色和alpha的规则:如何通过指定alpha混合量来计算RGB颜色?