【发布时间】:2013-01-24 01:36:52
【问题描述】:
我的第一个问题,希望措辞正确。我在这方面找不到任何东西,所以我会咬紧牙关。
我想创建一个geom_tile 图,其中对于x 和y 的每个组合,我有z 的5 个变量总和为1。我希望每个 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,其中的平衡是两种或多种策略的稳定平衡。
【问题讨论】:
-
假设你有四种颜色:红色、蓝色、绿色和紫色。如何区分红色和蓝色的组合与紫色?
-
@sebastian-c,我同意这是这种方法的一个主要问题:必须将 5 维向量投影到 3d 颜色空间上。此外,连续的 3d 色彩空间不具有良好的感知质量。这样的数字可能看起来很混乱或混乱(取决于数据......)
-
@bdemarest - 对于这个示例数据集,你是完全正确的。但在实际数据中,有大块纯色,它们之间有重叠区域,所以很清楚发生了什么。我只是不知道如何链接到我在这个网站上的数据,并且重现它的代码需要几个小时才能运行,所以我认为使用随机数来证明概念会很好。