【发布时间】:2012-01-06 08:54:52
【问题描述】:
我想做一个包含 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 运行代码,看看是否有效,但没有。
【问题讨论】:
-
包
colorspace有一个函数mixcolor将计算这种混合颜色的值:cran.r-project.org/web/packages/colorspace/colorspace.pdf。我不知道直接这样做的方法 - 我对这个问题的解决方案是找到一种不同的可视化数据的方法,例如使用hexbin,使用facets或计算每个点的净得分。 -
这不是一个真正的答案,但你可以看看en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending——我假设不同的设备(PDF、tikzDevice、PNG 等)都在使用这个算法的变体来确定重叠的颜色,它可能会帮助您了解正在发生的事情。
-
特别是,我从研究这些公式中发现 alpha 混合不是可交换的(事实上,正如文章指出的那样,在某些情况下它也不是关联的,尽管在这里没关系,因为您只组合了两种颜色)-这解释了上面的“订单很重要”结果。
-
我刚刚在 postscript() 设备上尝试了这个,圆圈没有重叠!这就是使用 cex 并且没有适当的设备大小所得到的......增加 cex 可以解决它。无论如何,postscript 设备不能处理透明度,只能叠印。嗯。我认为不可能(很容易)。
-
前段时间在 R-help 上也讨论过这个问题,R-core 成员做出了有趣的贡献:mail-archive.com/r-help@r-project.org/msg83970.html