我的第一个问题,希望它的措辞正确。我找不到任何关于这个的东西,所以我会咬紧牙关。
我想创建一个 geom_tile
其中对于 x
的每个组合的绘图和 y
, 我有 5 个变量用于 z
总和为一。我想要每个方块的颜色 x-y
组合反射(reflect)哪个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 channel ,所以如果你以不同的顺序放置瓷砖,颜色会改变。这应该可以作为其他人的起点。首先,我们将生成数据:
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 种颜色执行此操作。
关于r - 在 ggplot2 中覆盖多个 geom_tile 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14492512/