Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,是否可以在绘图中叠加2种颜色以生成第3种颜色(例如,使用加法或减法颜色混合)_R_Graphics_Colors_Rgb - Fatal编程技术网

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

在R中,是否可以在绘图中叠加2种颜色以生成第3种颜色(例如,使用加法或减法颜色混合),r,graphics,colors,rgb,R,Graphics,Colors,Rgb,我想用两类数据做一个散点图,一个用黄色绘制,一个用蓝色绘制,它们在叠加(或任何其他组合)的地方以绿色显示。我发现即使有了透明度,事情也会变得更加困难。图形的颜色受在空间中绘制的最后一个点是蓝色还是黄色的影响 例如,使用以下代码: 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 <-

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

例如,使用以下代码:

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 = "")
pdf()设备的帮助文件说背景的默认设置是“透明的”,尽管这在实践中似乎不是它的行为,可能是因为查看者假定背景为白色,或者可能是因为plot函数的默认设置为“白色”。中间部分首先成为白色和绿色的相等混合色,然后再添加蓝色。因此,我猜测数学会预测rgb值(0.5,0.5,(0.5+0.8)/2),然后将该混合物与叠加颜色混合,我认为白色+col1与col2的值以相等比例相加,这使得数学不可交换。无论如何,如果你能强制背景“透明”,最终结果可能会有所不同。默认行为更像是混合颜料,而不是闪烁的剧院灯光

PDF颜色模型如中所述,它将确定您可以从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()
pdf(“testfil12rev.pdf”,bg=“black”)

col1软件包
colorspace
有一个函数
mixcolor
,用于计算这种混合颜色的值:。我不知道有什么方法可以直接做到这一点——我对这个问题的解决方案是找到一种不同的可视化数据的方法,例如使用
hexbin
、使用
facets
或计算每个点的净分。这不是一个真正的答案,但你可以看看——我假设不同的设备(PDF、tikzDevice、PNG等)都在使用这种算法的变体来确定叠加的颜色,这可能会帮助您了解发生了什么。特别是,我通过对这些公式的研究发现,alpha混合是不可交换的(事实上,正如文章所指出的,在某些情况下,它也不具有关联性,尽管这在这里并不重要,因为你只是将两种颜色组合在一起)——这解释了你上面的“顺序问题”结果。我只是在附言()中尝试了这一点设备和圆圈没有重叠!这就是你使用cex得到的,没有合适的设备大小…增加cex可以修复它。无论如何,postscript设备不能处理透明度和只是套印。嗯。我认为不(容易)可能。不久前,R-help上也讨论了这一点,R-core成员对此做出了有趣的贡献:感谢您的参考。我将尝试使用透明设置。我尝试了透明设置(
png(“tmp.png”,bg=“transparent”)
),它确实改变了一些事情(通过去除一个因素,可能有助于任何探索),但结果仍然是非交换的,仍然不符合上述天真的期望(蓝色+黄色=绿色)。