我正在运行一个模拟,让两种类型的代理相互竞争。我们将这些代理称为“红色”和“蓝色”。有三种可能的结果:红色获胜、蓝色获胜或所有人都失败。我们还假设系统取决于两个参数:X 和 Y。
我想做的是创建一个伪彩色图,将结果编码为 X 和 Y 的函数。
每个点的色调是在有人获胜的情况下红色或蓝色获胜的可能性。如果蓝色总是获胜,那么它就是蓝色;如果红色总是获胜,那么它就是红色;等等
饱和度是指任何人获胜的概率。因此,如果没有人在 X 和 Y 的某个值上获胜,那么该点将是灰色的(无论如何,在 HSV 模型中)。
编辑:假设我们使用编码为 here 的 HSV 模型。 (不一定是这样,但我们可以这么说。)HSV 空间中的纯蓝色为 (240, 100, 100),纯红色为 (360, 100, 100)。还假设红色获胜的概率为 50%,蓝色获胜的概率为 25%,而无人获胜的概率为 25%。那么这个点将是(330,75,100)。
请注意,我并不担心从 HSV 转换为 RGB - 为此,我可以使用 col2rgb(hsv(...))
。问题在于阴谋本身。据我所知, image() 函数只能编码一个 channel 的信息;这是两个信息 channel 。
此外,结果是 X 和 Y 的连续函数,因此我想在值之间进行插值。 (如果重要的话,我正在使用“akima”包。)因此我找到了解决方案 here对我没有帮助(我认为)。
我很乐意使用任何软件包。我也很高兴不使用 R,只要结果漂亮并且不太复杂即可。
感谢您提供的任何帮助。
最佳答案
如果您可以使用 rgb 值创建一个数组(维度 1 和 2 指您的矩阵,维度 3 是红色、绿色和蓝色分量),那么您可以使用 rasterImage
绘制此数组功能。
一个简单的例子(我将把 hsv -> rgb 的转换留给你):
red <- matrix( runif(100), 10, 10 )
blue <- matrix( runif(100), 10, 10 )
rgb.mat <- array( dim=c(10,10,3) )
rgb.mat[ , ,1 ] <- red
rgb.mat[ , ,2 ] <- 0
rgb.mat[ , ,3 ] <- blue
plot.new()
plot.window(xlim=c(0,1),ylim=c(0,1))
rasterImage( rgb.mat, 0,0,1,1 ) # interpolate
rasterImage( rgb.mat, 0,0,1,1, interpolate=FALSE ) # don't
关于RGB 相当于 R 中的 image() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24021048/