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

时间:2011-11-25 13:18:56

标签: r graphics colors rgb

我想用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 = "")

根据您设置矢量orders的方式(设置绘制两个大点的方向),您会得到不同的结果: enter image description here

如果你交换了两个圆圈的顺序,你会得到: enter image description here

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

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

1 个答案:

答案 0 :(得分: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()

反转“订单”指示符也不会产生具有黑色背景的相同混合颜色。

编辑:有一个先前的SO帖子,其中包含混合颜色和字母的规则:How to calculate an RGB colour by specifying an alpha blending amount?