我的第一个问题,希望它的措词正确。我找不到任何东西,所以我要硬着头皮。
我想创建一个geom_tile
图,其中对于x
和y
的每种组合,我都有5个z
变量,它们全部加在一起。我希望每个x-y
组合的正方形颜色能反映哪个z
编号最大。例如,假设我有5个z
变量a
,b
,c
,d
和e
。如果a=1
和b=c=d=e=0
,则正方形将为蓝色,如果b=1
和a=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种颜色进行此操作。