4

我的第一个问题,希望它的措辞正确。我在这方面找不到任何东西,所以我会咬紧牙关。

我想创建一个geom_tile图,其中对于 和 的每个组合xy我有 5 个变量,它们的z总和为 1。我想要每个x-y组合的正方形颜色来反映哪个z数字最大。例如,假设我有 5个z变量abc和。如果和,则正方形为蓝色,如果和为红色,以此类推。如果和 其他为零,则为插值颜色(即紫色)。也许更好,红色和蓝色的交叉影线,但我不知道这是否可能在.dea=1b=c=d=e=0b=1a=c=d=e=0a=b=0.5ggplot

我不确定如何最好地继续前进。我考虑过geom_tile在彼此之上绘制 5 个图,其中每个图都是不同的颜色,并且 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,其中平衡是两种或多种策略的稳定平衡。

重叠的 geom_tile 绘图 ESS

4

1 回答 1

1

我冒昧地将您的示例简化为 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 种颜色来执行此操作。

于 2013-01-24T08:07:07.380 回答