我的第一个问题,希望它的措词正确。我找不到任何东西,所以我要硬着头皮。

我想创建一个geom_tile图,其中对于xy的每种组合,我都有5个z变量,它们全部加在一起。我希望每个x-y组合的正方形颜色能反映哪个z编号最大。例如,假设我有5个z变量abcde。如果a=1b=c=d=e=0,则正方形将为蓝色,如果b=1a=c=d=e=0,则将为红色,等等。如果a=b=0.5且其他均为零,则将为插值颜色(即紫色)。 。也许更好的是红色和蓝色的交叉线,但是我不知道在ggplot中是否可行。

我不确定如何最好地前进。我考虑过要在彼此上方绘制5个geom_tile图,其中每个图都有不同的颜色,而alpha则按例如a的值(因此,当a = 0时,单元格是透明的,而当a = 1时,单元格是彩色的)。也可能有一种使用色带渐变的方法,但是我也在那里画了一个空白。

如果有人能看到如何做到这一点,我将非常有义务。这是一个随机数的数据集,格式与我的实际数据相同。

rand <- matrix(runif(50*50*5), ncol=5, nrow=50*50)
rand <- rand / apply(rand, 1, sum) # Make sure the numbers sum to one in each row
d <- data.frame(a = rand[,1],
                b = rand[,2],
                c = rand[,3],
                d = rand[,4],
                e = rand[,5],
                expand.grid(x = 1:50, y = 1:50))


更新:通过使用来自sebastian-c的第一个答案和我自己的数据集,我能够得出这个数字。我使用RColorBrewer软件包中的brewer.pal(5,“ Spectral”)函数获得了颜色。需要自定义图例,否则我对此非常满意。纯色显示纯的“进化稳定策略”(ESS;即无法被突变策略击败的策略)。重叠的颜色区域显示混合的ESS,其中平衡是两种或多种策略的稳定平衡。

最佳答案

我冒昧地将您的示例简化为3列。老实说,我认为这种方法在2种以上的方法中效果都不理想,但是这就是我的处理方法。我也滥用Alpha通道,因此,如果您以不同顺序放置瓷砖,则颜色会改变。希望这可以作为其他人的起点。首先,我们将生成数据:

set.seed(100)

rand <- matrix(runif(100*3), ncol=3, nrow=100)
rand <- rand / apply(rand, 1, sum) # Make sure the numbers sum to one in each row
d <- data.frame(a = rand[,1],
                b = rand[,2],
                c = rand[,3],
                expand.grid(x=1:10, y=1:10))


现在为情节:

ggplot(d, aes(x=x, y=y))+
  theme_bw() + #For a clearer background
  geom_tile(alpha=d$a, fill="red")+
  geom_tile(alpha=d$b, fill="blue")+
  geom_tile(alpha=d$c, fill="green")+
  theme(panel.grid.major=element_blank())




我在考虑3列使用红色,绿色和蓝色的量,但这不适用于3列以上的任何东西。

编辑:最多3列的特定解决方案(我混合了蓝色和绿色):

d2 <- data.frame(col=rgb(rand), expand.grid(x=1:10, y=1:10))

ggplot(d2, aes(x=x, y=y)) +
  theme_bw()+
  geom_tile(aes(fill=col))+
  scale_fill_identity()




如果将红色,绿色或蓝色之一设置为0,则可以使用2种颜色进行此操作。

09-16 02:55