我想用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
的方式(设置绘制两个大点的方向),您会得到不同的结果:
如果你交换了两个圆圈的顺序,你会得到:
无论哪种方式,我都期待混合颜色以获得绿色。有没有办法做到这一点?谢谢!
编辑 - 这两个图是使用pdf设备制作的。我也尝试通过tikzDevice运行代码,看看是否有效,但事实并非如此。
答案 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?