R ggplot2 热图,使用自定义范围强制离散比例,向地图添加网格

osk*_*i86 0 r ggplot2

我在热图下方创建

热图

为此,我使用了此代码:

library(ggplot2)
library(reshape2)

winners_min_expd0 <- matrix(c(NA, 2, 2, 3, NA, 3, 2, 2, NA), nrow=3, ncol=3, byrow = T)
colnames(winners_min_expd0) <- c("homophily","heterophily","preferential")
rownames(winners_min_expd0) <- c("homophily","heterophily","preferential")
melted_min_expd0 <- melt(winners_min_expd0)
colnames(melted_min_expd0) <- c("winning", "looses", "times")
p_min_expd0 <- ggplot(melted_min_expd0, aes(looses, winning)) +
   geom_tile(aes(fill = times), colour = "white") +
   scale_fill_gradient(low = "white", high = "red") +
   ggtitle("Min function, exp decay off") +
   scale_y_discrete(limits=c("preferential", "heterophily", "homophily")) +
   xlab("(x) looses against (y)") + ylab("(y) winning over (x)")
p_min_expd0
Run Code Online (Sandbox Code Playgroud)

我想要:

  • 重新调整“时间”栏到范围<0:5>,我知道没有{0,1,4,5}值,但我想要这个范围
  • 使“时间”热标离散,这意味着一个数字的纯色,例如5 = hot red,4 = red等(可能重复:ggplot2 热图,带有范围值的颜色),范围类似<0,1)是可以接受的,但我更喜欢尺度上的单个自然数(而不是值范围)
  • 在热图上添加一个细网格,因此所有瓷砖(包括白色瓷砖)都被它分隔开
  • 将 NA 值的灰色更改为一些较浅的灰色

感谢帮助,以及更短的代码。
谢谢!

MrF*_*ick 5

这里有一些修改

p_min_expd0 <- ggplot(melted_min_expd0, aes(looses, winning)) +
   geom_tile(aes(fill = cut(times, breaks=0:5, labels=1:5)), colour = "grey") +
   ggtitle("Min function, exp decay off") +
   scale_y_discrete(limits=c("preferential", "heterophily", "homophily")) +
   scale_fill_manual(drop=FALSE, values=colorRampPalette(c("white","red"))(5), na.value="#EEEEEE", name="Times") + 
   xlab("(x) looses against (y)") + ylab("(y) winning over (x)")
Run Code Online (Sandbox Code Playgroud)

由于您想要一个离散量表,您可以通过自己进行转换来处理您的前两个“愿望” cut()。这使连续变量成为离散变量。由于我们现在使用的是离散比例,我们必须自己设置色带scale_fill_manual。“网格”颜色使用 中的colour=参数设置geom_tile。NA 颜色设置为scale_fill_maual(na.value=)。

在此处输入图片说明

  • 您基本上只是发布了一份编辑清单,以对您的情节进行编辑,并要求某人为您做这些。这些任务中的每一个都可能已经在 SO 上有了答案。这只是一次只问一个明确的重点问题,并表明你已经努力自己回答了。但是您做得很好,包括一个非常有用的可重现示例。 (2认同)