r - 在 ggplot2 中覆盖多个 geom_tile 图

标签 r ggplot2 heatmap

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

我想创建一个 geom_tile其中对于 x 的每个组合的绘图和 y , 我有 5 个变量用于 z总和为一。我想要每个方块的颜色 x-y组合反射(reflect)哪个z数量最大。例如,假设我有 5 z变量 a , b , c , de .如 a=1b=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,其中平衡是两个或多个策略的稳定平衡。

Overlapped geom_tile plots 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())

enter image description here

我在想,对于 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()

enter image description here

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

关于r - 在 ggplot2 中覆盖多个 geom_tile 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14492512/

相关文章:

r - 漏洞? Stargazer 无法使用 "omit"选项正确显示固定效应/因子标签?

r - 使用具有功能真/假值的 dplyr 的 if_else 函数

r - ggplot2:从 ggplot 对象创建独立副本

arrays - 是否可以使用 gnuplot 以这种格式绘制一系列矩阵

python - 来自带有 NaN 的 Pandas 数据框的 seaborn 热图

r - 将 POLYGON 聚合为 MULTIPOLYGON 并保留 data.frame

r - 如何在 R Plumber 中获取客户端 IP 地址

r - ggplot2:qplot 面轴自由缩放,同时保留网格

r - 在 R 中指定网格箭头的 gpar 设置

gnuplot - 非均匀网格上的 Gnuplot 热图